假设一个使用 IntelliJ
开发的应用程序,将打包在单个 JAR 中并使用以下“资源”文件
- 可以位于任何包中(不仅位于
resources
文件夹中) - 可能具有非标准文件扩展名(甚至可能是 Java 文件)
- 并非出现在所有类路径中(例如,为了避免循环依赖)
如果包(例如,com.example.pack
)中的类(例如,MyClass
)被指定了指向驻留在外部的此类“资源”的路径它的类路径并尝试通过访问它
MyClass.class.getClassloader().getResourceAsStream(resourcePath);
由于类路径的原因,IntelliJ
单元测试中返回的 InputStream
对象(预计)为 null
。但是,当代码执行时它会起作用,因为所有内容都在同一个 JAR 中。
例如,将应用程序的所有包捆绑在同一个 JAR 中(例如 MyApplication.jar
)并运行类似的内容
java -cp MyApplication.jar com.example.pack.MyClass
从命令行,确实产生一个非null
InputStream
。
有没有办法配置IntelliJ
以某种方式“知道”所有包都属于同一个JAR
,从而相应地对待它们,以便上面的调用 getResourceAsStream()
有效吗?
最佳答案
配置的唯一方法是将包含资源文件的模块添加为包含测试的模块的依赖项。然后 IntelliJ IDEA 会将该模块包含到测试的运行时类路径中,并且 getResourceAsStream()
调用将起作用。
关于java - 在 IntelliJ 中从类路径外部的 JAR 加载资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35445774/