java - 使用国外maven模块的资源?

标签 java maven

我正在尝试使用另一个模块中的资源来导入文件。我的目标是通过每个自定义类传递文件名,并让另一个模块的基类获取文件。

但我总是遇到空指针异常。 我做错了什么?

模块A:

src/main/java/foo/bar/MyBaseClass.java
src/main/resources/foo/bar/test.xml

模块B:

src/main/java/other/path/MyCustomClass extends MyBaseClass

类(class):

abstract class MyBaseClass {
    public static String TESTFILE = "foo/bar/test.xml";
    getData(String filename) {
        InputStream inputStream = MyBaseClass.class.getResourceAsStream(String filename); //NPE
    }
}

class MyCustomClass extends MyBaseClass() {
    doSomething() {
        getData(TESTFILE);
    }
}

/编辑: 我应该使用这样的东西吗?

super.getClass().getResourceAsStream(..)

最佳答案

您很可能应该使用 ClassLoader.getResourceAsStream()

例如

Thread.currentThread().getContextClassLoader().getResourceAsStream()  

(可能更安全,可能在不同的环境中更正确地工作,即使用特殊的类加载器,Java EE?)

或者至少

aClass.getClassLoader().getResourceAsStream()

这是您应该在类路径上加载资源的方式,这些资源可能位于与您调用 getResourceXXX 的给定类不同的 JAR(或类路径条目)中。

如果您使用模块 B 中的类,并且想要从模块 A 加载资源,则需要使用 ClassLoader.getResourceXXX。

所以在Java中你通常应该使用这种方法(除非你关心将资源加载限制在较小的区域......)

另一件事要注意:注意需要有一个前导“/”,无论您使用哪种方法,都要仔细检查 javadoc

另请参阅:http://www.xyzws.com/servletfaq/what-is-different-between-classloadergetresourceasstream-and-classgetresourceasstream/21

关于java - 使用国外maven模块的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818233/

相关文章:

java - Maven 原型(prototype)的速度反射 : get data from Json

java - xsd 类型定义可以引用 xml 文件本身吗?

java - 在GCP实例中下载或构建maven项目的方法是什么?

java - 如何为 esri Geometry-api 构建 jar 文件

java - 为什么 Double.MIN_VALUE 不是负数

eclipse - 使用 Maven 进行 JUnit 测试

java - Maven-assembly-plugin 失败,超过 GC 开销限制

java - 无法访问句柄事件中的按钮/文本区域

java - SendKeys() 仅在我的表单的一个字段中不起作用

java - Android:如何从监听器调用 Activity 的方法