【发布时间】:2020-04-20 07:07:05
【问题描述】:
这是一个maven项目,并且在资源目录中有一张图片:
├─ src
├─ main
├─ java
└─ resources
└─imgs
└─logo.png
代码:
public class Test {
public static void main(String[] args) {
InputStream stream = Test.class.getClassLoader().getResourceAsStream("/imgs/logo.png");
InputStream stream1 = Test.class.getClassLoader().getResourceAsStream("imgs/logo.png");
System.out.println(stream == null ? "stream is null!" : "stream is not null!");
System.out.println(stream1 == null ? "stream1 is null!" : "stream1 is not null!");
}
}
当我添加 module-info.java 到项目时,将打印:
stream is null!
stream1 is null!
但是当我从项目中删除 module-info.java 时,会打印:
stream is null!
stream1 is not null!
为什么?以及如何使用ClassLoader在模块化java项目中加载资源?
【问题讨论】:
-
当你从ClassLoader获取资源时,你已经是从root开始了,所以你不应该在前面使用/,所以第二个是正确的。模块是另一回事。
标签: java maven classloader java-11 java-module