我正在使用 maven 2.1.0 并且有一个包含多个模块的项目。 示例模块:
- spr-资源
- spr-通用
spr-common 依赖于 spr-resources
spr-resources 只包含文件,没有类。
spr-common 有一个 junit,需要从 spr-resources jar 加载一个文件。
我用过:
String fileName = getClass().getResource("/jaskeyfile.3DES").getFile();
is = getClass().getClassLoader().getResourceAsStream(fileName);
is.read(data);
当我在 IntelliJ 中运行测试时这有效,但是当我进行 mvn 测试时,当我尝试对其执行 read() 时它失败并出现 NullPointerException。
为什么会这样?它应该可以很好地从依赖项中读取文件。
此外,spr-common 中的 pom.xml 对 spr-resources 有依赖性(尝试使用范围测试和不使用它)
编辑: 我也试过了
getClass().getClassLoader().getResourceAsStream("/jaskeyfile.3DES");
没有运气。
编辑2: 给定的文件存在于生成的 jar 中,所以我想它应该是可访问的。
最佳答案
仔细检查一切
这是一个要完成的列表:
- 文件
jaskeyfile.3DES
位于 spr-resources 模块内的src/main/resources
- 您的本地存储库包含最新版本的 spr-resources-x.y.z-SNAPSHOT.jar(或者您已直接发布/版本控制)并且您肯定已经在其上使用了 mvn clean install
- spr-common 模块引用了 spr-resources-x.y.z.jar 的正确(命名)版本(编译范围将在测试和编译类路径中看到)
如果以上所有条件都为真,那么您的 getClass().getResourceAsStream("/jaskeyfile.3DES")
调用应该有效。我在我的项目中一直使用这种结构,所以你不会在这里要求月亮或任何东西。
关于java - 从maven junit中的依赖jar加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376032/