我有一个包含项目主类的jar。这取决于驻留在lib
目录中的其他几个jar。一类这样的dependend jar加载一个ressource "/Data/foo/bar/file.txt"
。但是将此文件作为ressource加载会导致null。
这是目录结构:
./main.jar
./lib/lib1.jar
./lib/lib2.jar
./lib/lib3.jar
./lib/runtimedata/Data/foo/bar/file.txt
这是main.jar的manifest.mf的类路径:
lib/lib1.jar lib/lib2.jar lib/lib3.jar lib/runtimedata
我通过
启动应用程序java -jar main.jar
lib2.jar
包含一个尝试使用
ThatClass.class.getResource("/Data/foo/bar/file.txt");
但这恰好是空的。为什么? lib / runtimedata位于类路径中。
我甚至试图将Data
目录放入lib / lib / runtimedata,以防路径相对于包含加载类的jar文件。但这没有用。
我在这里做错了什么?
修改:
使用
运行应用程序java -cp main.jar:lib/*.jar:lib/runtimedata my.package.Main
正常工作。
编辑2 :
我无法更改执行资源加载的lib。我只使用那个lib。我唯一可以改变的是main.jar类路径和命令行。
答案 0 :(得分:0)
当您使用“/”开始路径时,它被视为绝对路径。试试ThatClass.class.getResource("/runtime/Data/foo/bar/file.txt");
否则,如果您无法更改代码,请将文件放在/Data/foo/bar/file.txt
上