如何在 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.