java - 在 IntelliJ 中从类路径外部的 JAR 加载资源文件

标签 java intellij-idea resources classpath classloader

假设一个使用 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/

相关文章:

java - 如何在Java 8中按流对Map对象上的时间段求和对象?

angularjs - 使用 TypeScript : TS2304: Cannot find name 'module' 的 Angular 单元测试

Android:如何在多语言资源中重复使用字符串

asp.net - 在 Windows Azure 中使用本地化资源时出现异常

android - 位图资源取决于屏幕密度

java对象序列化 - 线程安全?

java - byte[] 作为 Rest Web 服务的输入

java - Intellij Idea 中的 Git 功能不起作用

java - Apache Spark 无法处理大型 Cassandra 列族

Java错误: release version 14 not supported in IntelliJ IDEA