我编写了一个打包到1.jar
使用此代码:
return isProd? "/etc/waze/automation/devices.json":
DeviceRepositoryFromJsonFile.class.getClassLoader().getResource("devices.json").getPath().toString();
devices.json在这里:
我有另一个项目取决于1.jar
然而classLoader
找不到本地devices.json
文件,而是在jar中打包了
无论如何它显示文件不存在。
我该如何解决这个问题?无论如何只使用绝对路径?
答案 0 :(得分:1)
它没有直接回答你的问题,但它可以更快地解决你的问题。
据我所知,您尝试检测json文件的绝对路径并将其传递给另一个方法,以便可以处理此文件。相反,它可以更简单:
public byte[] getDevicesJsonBytes() {
return isProd
? IOUtils.toByteArray(ABSOLUTE_PATH_TO_PROD_FILE)
: IOUtils.toByteArray(DeviceRepositoryFromJsonFile.class.getResourceAsStream(RESOURCE_CLASSPATH);
}
在getResourceAsStream
或class
实例上使用classLoader
读取类路径资源的常用方法。此外,许多框架都有自己的资源抽象,但我想你现在不需要它们。
答案 1 :(得分:1)
如果在截图中,devices.json位于src / main / resources中,并且包已成功将其视为包路径并放入jar文件根目录,那么您可以通过以下方式找到该文件:< / p>
DeviceRepositoryFromJsonFile.class.getResource("/devices.json");
注意&#34; /&#34;斜杠很重要,表示要从类路径的根目录进行搜索。