【发布时间】:2014-03-01 22:12:28
【问题描述】:
我有一个包含项目主类的 jar。这取决于驻留在lib 目录中的其他几个jar。一类这样的依赖 jar 加载资源"/Data/foo/bar/file.txt"。但是将此文件作为资源加载会导致 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:
我无法更改执行资源加载的库。我只使用那个库。我唯一可以改变的是 main.jar 类路径和命令行。
【问题讨论】:
-
我总是使用
X.class.getClassLoader().getResource("file.txt")。也许这有帮助。试试ThatClass.class.getClassLoader().getResource("/Data/foo/bar/file.txt"); -
@marioosh 不,它没有。我很抱歉。但我无法更改使用的库。我必须按原样使用它们。我只能设置类路径和应用程序的启动方式。
标签: java jar null resources classpath