Prima di Jigsaw era abbastanza facile sostituire una o più classi in OpenJDK (per eseguire qualche test o dare un contributo). Potrei copiare un file originale dalla fonte OpenJDK, per esempio, java/util/ArrayList.java
in src/java/util/
, aggiungere tutte le modifiche che voglio, quindi compilarlo normalmente (l'output a mypatch
directory):Come patch OpenJDK 9 con Jigsaw integrato?
$ javac.exe src\java\util\ArrayList.java -d mypatch
Dopo che ho potuto lanciare JVM con -Xbootclasspath/p
a sostituire originale ArrayList
con la patch uno:
$ java -Xbootclasspath/p:mypatch MyTestClass
Tuttavia, questo non funziona più in quanto l'integrazione Jigsaw in Java 9-bis + 111. Il comando di compilazione tonnellate di errori di iniziare in questo modo:
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
^
E anche se io compilo con più vecchio JDK, quindi JVM non può iniziare:
-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.
Come rendere le patch per JDK con Jigsaw?
Si noti che la La sintassi '-Xpatch' che stai utilizzando è un vecchio modulo, che scomparirà presto - vedi [la mailing list] (http://mail.openjdk.java.net/pipermail/jigsaw-dev/2016-March/007079.html). – Nicolai
Grazie, aggiornerò la risposta una volta che cambierà. Sembra che attualmente il nuovo modulo non funzioni per i pacchetti JDK. –
@NicolaiParlog aggiornato, grazie ancora –