如何从依赖jar中查找本地资源?

时间:2016-06-20 10:21:44

标签: java file jar classloader

我编写了一个打包到1.jar

的代码

使用此代码:

    return isProd? "/etc/waze/automation/devices.json":
            DeviceRepositoryFromJsonFile.class.getClassLoader().getResource("devices.json").getPath().toString();

devices.json在这里:

enter image description here

我有另一个项目取决于1.jar

然而classLoader找不到本地devices.json文件,而是在jar中打包了

无论如何它显示文件不存在。

enter image description here

我该如何解决这个问题?无论如何只使用绝对路径?

2 个答案:

答案 0 :(得分:1)

它没有直接回答你的问题,但它可以更快地解决你的问题。

据我所知,您尝试检测json文件的绝对路径并将其传递给另一个方法,以便可以处理此文件。相反,它可以更简单:

public byte[] getDevicesJsonBytes() {
    return isProd
        ? IOUtils.toByteArray(ABSOLUTE_PATH_TO_PROD_FILE)
        : IOUtils.toByteArray(DeviceRepositoryFromJsonFile.class.getResourceAsStream(RESOURCE_CLASSPATH);
}

getResourceAsStreamclass实例上使用classLoader读取类路径资源的常用方法。此外,许多框架都有自己的资源抽象,但我想你现在不需要它们。

答案 1 :(得分:1)

如果在截图中,devices.json位于src / main / resources中,并且包已成功将其视为包路径并放入jar文件根目录,那么您可以通过以下方式找到该文件:< / p>

DeviceRepositoryFromJsonFile.class.getResource("/devices.json");

注意&#34; /&#34;斜杠很重要,表示要从类路径的根目录进行搜索。