假设在IntelliJ
中开发的应用程序打包在单个JAR中并使用“资源”文件
resources
文件夹中)如果一个包(比如MyClass
)中的一个类(例如,com.example.pack
)被赋予了一个路径,这个“资源”位于其类路径之外,并试图通过
MyClass.class.getClassloader().getResourceAsStream(resourcePath);
由于类路径,InputStream
单元测试中返回的IntelliJ
对象(预期)null
。但是,当代码执行时,它可以工作,因为所有内容都在同一个JAR中。
例如,将应用程序的所有包捆绑在同一个JAR中(例如,MyApplication.jar
)并运行类似
java -cp MyApplication.jar com.example.pack.MyClass
从命令行生成非null
InputStream
。
有没有办法让IntelliJ
以某种方式“知道”所有包都属于同一个JAR
并因此对其进行相应处理,以便上述对getResourceAsStream()
的调用有效?
答案 0 :(得分:1)
配置的唯一方法是将包含资源文件的模块作为依赖项添加到包含测试的模块中。然后IntelliJ IDEA将该模块包含在测试的运行时类路径中,getResourceAsStream()
调用将起作用。