Hi Michael,
On 26/09/2017 9:01 PM, David Holmes wrote:
Hi Michael,
Moving over to core-libs-dev.
The discussion in 8185540 is a bit confusing to me.
I've re-read the discussion and related bugs. As I understand it what
you see now is expected and reflects what happens in 7 and 8. What
should see is that the empty path elements causes CWD to be included for
resource lookup, but not for class lookup. That inconsistency was
flagged for fixing in 7, deferred to 9, rectified early on, but then
reverted when the module system was integrated - with the eventual fix
re-appearing in JDK 10.
Cheers,
David
David
On 26/09/2017 8:45 PM, Michael Rasmussen wrote:
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