Before Jigsaw, it was pretty easy to replace one or more OpenJDK classes (run some kind of test or contribute). I could copy the source file from the OpenJDK source, for example, java/util/ArrayList.java to src/java/util/ , add any changes I want, and then compile in normal mode (output to the mypatch directory):
$ javac.exe src\java\util\ArrayList.java -d mypatch
After that, I could start the JVM with -Xbootclasspath/p to replace the original ArrayList with a fixed one:
$ java -Xbootclasspath/p:mypatch MyTestClass
However, this does not work anymore, because the Jigsaw integration in Java 9-ea + 111. The compilation command reports a lot of errors, starting as follows:
src\java\util\ArrayList.java:26: error: package exists in another module: java.base package java.util; ^ src\java\util\ArrayList.java:108: error: cannot find symbol public class ArrayList<E> extends AbstractList<E> ^ symbol: class AbstractList src\java\util\ArrayList.java:109: error: cannot find symbol implements List<E>, RandomAccess, Cloneable, java.io.Serializable ^
And even if I compile with the old JDK, the JVM cannot start:
-Xbootclasspath/p is no longer a supported option. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
How to make patches for JDK with Jigsaw?
java jvm java-9 javac jigsaw
Tagir valeev
source share