getResource difference
GitHub:资源差异
我发现使用 java8 和 java11 运行的方法getResource
的结果是不一样的。
Maven 项目t01
与java8
一起运行,Maven 项目t02
与java11
一起运行
资源结构
resources - dir b.txt a.txt
T01(JDK8)
法典
System.out.println("-----------------0:");
System.out.println(MainTest.class.getResource(""));
System.out.println(MainTest.class.getResource("/"));
System.out.println(MainTest.class.getClassLoader().getResource(""));
System.out.println(MainTest.class.getClassLoader().getResource("/"));//should be null
System.out.println("-----------------1:");
System.out.println(MainTest.class.getResource("/a.txt"));
System.out.println(MainTest.class.getClassLoader().getResource("a.txt"));
System.out.println("-----------------2:");
System.out.println(MainTest.class.getResource("/dir/b.txt"));
System.out.println(MainTest.class.getClassLoader().getResource("dir/b.txt"));
结果
-----------------0:
file:/D:/dev/workspace/test/t01/target/classes/top/topsoft/test/
file:/D:/dev/workspace/test/t01/target/classes/
file:/D:/dev/workspace/test/t01/target/classes/
null
-----------------1:
file:/D:/dev/workspace/test/t01/target/classes/a.txt
file:/D:/dev/workspace/test/t01/target/classes/a.txt
-----------------2:
file:/D:/dev/workspace/test/t01/target/classes/dir/b.txt
file:/D:/dev/workspace/test/t01/target/classes/dir/b.txt
T02(JDK11)
法典
System.out.println("-----------------0:");
System.out.println(MainTest.class.getResource(""));
System.out.println(MainTest.class.getResource("/"));
System.out.println(MainTest.class.getClassLoader().getResource(""));
System.out.println(MainTest.class.getClassLoader().getResource("/"));//should be null
System.out.println("-----------------1:");
System.out.println(MainTest.class.getResource("/a.txt"));
System.out.println(MainTest.class.getClassLoader().getResource("a.txt"));
System.out.println("-----------------2:");
System.out.println(MainTest.class.getResource("/dir/b.txt"));
System.out.println(MainTest.class.getClassLoader().getResource("dir/b.txt"));
结果
-----------------0:
file:/D:/dev/workspace/test/t02/target/classes/top/topsoft/test/
null
null
null
-----------------1:
file:/D:/dev/workspace/test/t02/target/classes/a.txt
file:/D:/dev/workspace/test/t02/target/classes/a.txt
-----------------2:
file:/D:/dev/workspace/test/t02/target/classes/dir/b.txt
null
该项目t01
结果与我预期的相同。
但这个项目的结果t02
超出我的预期。
MainTest.class.getResource("/")
MainTest.class.getClassLoader().getResource("")
MainTest.class.getClassLoader().getResource("dir/b.txt")
为什么要打印空?
您可以使用 github 存储库尝试一下。
在java11中运行必须具有module-info.java
,如果module-info.java
不存在,它将在没有模块的情况下运行,结果将与在java8中运行相同