class.getResource()虽然在classpath中,但仍为null

时间:2014-02-05 12:56:46

标签: java jar null resources classpath

我有一个包含项目主类的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类路径和命令行。

1 个答案:

答案 0 :(得分:0)

当您使用“/”开始路径时,它被视为绝对路径。试试ThatClass.class.getResource("/runtime/Data/foo/bar/file.txt");

否则,如果您无法更改代码,请将文件放在/Data/foo/bar/file.txt