`ClassLoader#getResources("")` の返り値が Java9 以後は jar:file: も含むようになっている
package com.example;
public class Example {
public static void main(String[] args) throws java.io.IOException {
System.err.println("JVM: " + java.lang.management.ManagementFactory.getRuntimeMXBean().getVmVersion());
ClassLoader classLoader = Example.class.getClassLoader();
System.out.println(classLoader);
java.util.Enumeration<java.net.URL> resources = classLoader.getResources("");
while (resources.hasMoreElements()) {
System.out.println("-- " + resources.nextElement());
}
}
}
このようなプログラムの実行結果が、Java 9 以後では異なる。
Run with Java 8
JVM: 25.201-b09
sun.misc.Launcher$AppClassLoader@2a139a55
-- file:/Users/tokuhirom/work/urlclassloader-behavoiour/build/classes/java/main/
https://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html#getResources-java.lang.String-
Run with Java 11
JVM: 11.0.1+13-LTS
jdk.internal.loader.ClassLoaders$AppClassLoader@799f7e29
-- file:/Users/tokuhirom/work/urlclassloader-behavoiour/build/classes/java/main/
-- jar:file:/Users/tokuhirom/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.10.2/fbfe9bf099287c35b8336ea9da194f301a112a11/byte-buddy-agent-1.10.2.jar!/META-INF/versions/9/
こんな感じ。