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