getResourceAsStream 在 Java 10 中返回 null

getResourceAsStream returning null in Java 10

我有一个使用 Java 1.8.0 162 的应用程序,我正在将它升级到 Java 10。我遇到的问题之一是

appProperties.getClass().getResourceAsStream("/application.properties")

开始在 Java 中返回 null 10. 知道为什么吗? appProperties 定义如下:

appProperties = new Properties();

这发生在静态方法中,以防相关。

文件存在于 src/main/resources/application.properties 中。无论我是 运行 来自 IntelliJ 还是来自 Maven 生成的 jar,都会发生这种情况。

我尝试添加:

<resources>
    <resource>
       <directory>src/main/resources</directory>
    </resource>
</resources>

我的 pom.xml 但是没有效果。

打印 class 路径:

System.getProperty("java.class.path")

产量,作为第一个条目:

C:\Users\pupeno\Documents\Dashman\code\dashman\target\classes

其中包含 application.properties.

我找到了一个解决方案,虽然我不完全理解为什么这行得通而有问题的行却行不通,但这行得通:

Application.class.getResourceAsStream("/application.properties")

其中 Application 在我的应用程序中只是一个 class。

也许这与指向的答案有关,Application.class正在使用my class加载器和appProperties.getClass() 正在使用系统 class 装载程序。但是为什么它在 Java 8 和 10 上的表现不同并不明显。

该变量的 class 是一个系统 class,它由不同的 class 加载程序加载。

您应该使用自己的 classes.

我在使用 Intellij 时遇到了同样的错误,解决方法是我需要添加我打算获取的特定资源的文件格式。导航 CRTL+ALT+s 或设置->编译器->资源模式: 在该字段中输入文件扩展名。点击应用,然后okay