Xbootclasspath/a adds CWD to boot class path
Michael Rasmussen
michael.rasmussen at zeroturnaround.com
Tue Sep 26 10:45:42 UTC 2017
Hi
We have discovered an issue with using -Xbootclasspath/a on Java 9.
if you add -Xbootclasspath/a as JVM argument, the current working directory
also gets added to boot class path!
take the following Test.java class:
import java.util.Collections;
public class Test {
public static void main(String[] args) throws Throwable {
System.out.println(Collections.list(
ClassLoader.getPlatformClassLoader().getResources("foo.txt")));
}
}
$ java -fullversion
openjdk full version "9+181"
$ javac Test.java
$ pwd
/home/michael/test
$ touch foo.txt
$ touch /tmp/foo.txt
$ java Test
[]
$ java -Xbootclasspath/a:/tmp Test
[file:/home/michael/test/foo.txt, file:/tmp/foo.txt]
As the above shows, adding the -Xbootclasspath/a, also added the current
working directory to the boot class path. Using a new ClassLoader(null){}
instead of the platform class loader gives the same result.
A bit of digging shows that "jdk.boot.class.path.append" system property
contains a leading path-separator char, like ":/tmp" (";C:/tmp" on Win),
meaning in jdk.internal.loader.ClassLoaders.<clinit>, when that string
is converted to a classpath, the empty first part gets parsed as cwd.
I assume this is not the intended behavior of -Xbootclasspath/a, as the
same thing doesn't happen on Java 8, also it's not documented as such.
I found some related issues in Jira, such as JDK-8185540, that seems
to remedy this, but it's still weird that the JVM adds the empty path
element to begin with.
Kind regards,
Michael Rasmussen
More information about the jdk9-dev
mailing list