如何在 Apache Brooklyn 中获取资源
How to get a Resource in Apache Brooklyn
我正在尝试构建我自己的实体,它基于 VanillaWindowsProcess。这个想法是,在安装 windows 机器之后,执行一些在文件中的 powershell 命令。
我尝试了在另一个 Java 项目中多次使用的东西来获取资源:
private void runInstallationScript() {
List<String> lines;
try {
lines = FileUtils.readLines(
new File(TalendWindowsProcessWinRmDriver.class.getResource("/my/path/file.txt").getFile()),
"utf-8");
executePsScript(lines);
} catch (IOException e) {
LOG.error("Error reading the file: ", e);
}
}
但我总是收到以下信息:
ava.io.FileNotFoundException: File 'file:/opt/workspace/incubator-brooklyn/usage/dist/target/brooklyn-dist/brooklyn/lib/dropins/myProject-0.0.1-SNAPSHOT.jar!/my/path/file.txt' does not exist
很奇怪,因为文件在那个路径下的jar中。我做了一个测试(没有 Apache Brooklyn 基础设施)并且它有效,但另一方面,它没有。
该项目遵循 Maven 标准结构,文件本身位于 src/main/resources/my/path/file.txt
有什么地方不对吗?或者也许有另一种方法来获取该文件?任何帮助将不胜感激。
您不能将 jar 中的资源作为 File
对象进行访问。您需要使用 InputStream
(或 URL
)才能访问它。
因为您已经在使用 getResource
,您应该更改方法 FileUtils.readLines
以接受 InputStream
(或 URL
)作为输入。
如果您无法访问源代码,您可以编写自己的方法或使用 Files.readAllLines
for Java >= 7.
我正在尝试构建我自己的实体,它基于 VanillaWindowsProcess。这个想法是,在安装 windows 机器之后,执行一些在文件中的 powershell 命令。
我尝试了在另一个 Java 项目中多次使用的东西来获取资源:
private void runInstallationScript() {
List<String> lines;
try {
lines = FileUtils.readLines(
new File(TalendWindowsProcessWinRmDriver.class.getResource("/my/path/file.txt").getFile()),
"utf-8");
executePsScript(lines);
} catch (IOException e) {
LOG.error("Error reading the file: ", e);
}
}
但我总是收到以下信息:
ava.io.FileNotFoundException: File 'file:/opt/workspace/incubator-brooklyn/usage/dist/target/brooklyn-dist/brooklyn/lib/dropins/myProject-0.0.1-SNAPSHOT.jar!/my/path/file.txt' does not exist
很奇怪,因为文件在那个路径下的jar中。我做了一个测试(没有 Apache Brooklyn 基础设施)并且它有效,但另一方面,它没有。
该项目遵循 Maven 标准结构,文件本身位于 src/main/resources/my/path/file.txt
有什么地方不对吗?或者也许有另一种方法来获取该文件?任何帮助将不胜感激。
您不能将 jar 中的资源作为 File
对象进行访问。您需要使用 InputStream
(或 URL
)才能访问它。
因为您已经在使用 getResource
,您应该更改方法 FileUtils.readLines
以接受 InputStream
(或 URL
)作为输入。
如果您无法访问源代码,您可以编写自己的方法或使用 Files.readAllLines
for Java >= 7.