从 maven junit 内的依赖项 jar 加载文件
我正在使用 maven 2.1.0 并且有一个包含多个模块的项目。 示例模块:
- spr-resources
- spr-common
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 中,所以我想它应该可以访问。
I'm using maven 2.1.0 and have a project with multiple modules.
Example modules:
- spr-resources
- spr-common
spr-common has a dependency on spr-resources
spr-resources contains only files, no classes.
spr-common has a junit in which needs to load a file from spr-resources jar.
I used:
String fileName = getClass().getResource("/jaskeyfile.3DES").getFile();
is = getClass().getClassLoader().getResourceAsStream(fileName);
is.read(data);
And this works when I run the test in IntelliJ, but when I do mvn test, it fails with NullPointerException when I try to do read() on it.
Why is this happening? It should read a file from dependency just fine.
Also, pom.xml in spr-common has dependency on spr-resources (tried both with scope test and without it)
EDIT:
I tried also
getClass().getClassLoader().getResourceAsStream("/jaskeyfile.3DES");
with no luck.
EDIT2:
The given file exists in the resulting jar, so I guess it should be accessible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
仔细检查所有内容
这里有一个需要处理的列表:
jaskeyfile.3DES
位于 spr-resources 模块内的src/main/resources
中如果上述所有条件均为 true,则您的
getClass().getResourceAsStream("/jaskeyfile.3DES")
调用应该有效。我在我的项目中一直使用这种结构,所以你在这里不需要月亮或任何东西。Check everything carefully
Here's a list to work through:
jaskeyfile.3DES
is located insrc/main/resources
within the spr-resources moduleIf all the above are true then your
getClass().getResourceAsStream("/jaskeyfile.3DES")
invocation should work. I use this structure all the time in my projects so you're not asking for the moon or anything here.我相信问题可能出在前导斜杠上。我认为这两个都应该有效:
getClass().getResourceAsStream("/jaskeyfile.3DES")
getClass().getClassLoader().getResourceAsStream("jaskeyfile.3DES")
Class.getResourceAsStream()
采用相对于类的包目录的路径,因此它接受前导斜杠。ClassLoader.getResourceAsStream() 已经采用绝对路径,因此它不接受前导斜杠。
I believe the issue may be with the leading slash. I think both of these should work:
getClass().getResourceAsStream("/jaskeyfile.3DES")
getClass().getClassLoader().getResourceAsStream("jaskeyfile.3DES")
Class.getResourceAsStream()
takes a path relative to the class's package directory so it accepts the leading slash.ClassLoader.getResourceAsStream()
takes an absolute path already so it doesn't accept the leading slash.