Vor Jigsaw war es ziemlich einfach, eine oder mehrere Klassen in OpenJDK zu ersetzen (um einen Test durchzuführen oder einen Beitrag zu leisten). Ich konnte eine Originaldatei von OpenJDK Quelle, beispielsweise kopieren, java/util/ArrayList.java
in src/java/util/
, fügen Sie alle Änderungen, die ich will, dann kompilieren Sie es normalerweise (Ausgeben mypatch
Verzeichnis):Wie Patch OpenJDK 9 mit Jigsaw integriert?
$ javac.exe src\java\util\ArrayList.java -d mypatch
Danach konnte ich JVM starten mit -Xbootclasspath/p
zu ersetzen original ArrayList
mit der gepatchten:
$ java -Xbootclasspath/p:mypatch MyTestClass
Allerdings ist dies nicht mehr funktionieren, da Jigsaw Integration in Java 9-ea + 111. Die Kompilation Befehl meldet Tonnen von Fehlern beginnen wie folgt aus:
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
^
Und selbst wenn ich mit älteren JDK kompilieren, dann kann JVM nicht starten:
-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.
Wie Patches für JDK mit Jigsaw zu machen?
Beachten Sie, dass die Die '-Xpatch'-Syntax, die Sie verwenden, ist ein altes Formular, das bald verschwinden wird - siehe [die Mailing-Liste] (http://mail.openjdk.java.net/pipermail/jigaw-dev/2016-March/007079.html). – Nicolai
Danke, ich werde die Antwort aktualisieren, sobald sie sich ändert. Scheint, dass das neue Formular für JDK-Pakete nicht funktioniert. –
@NicolaiParlog aktualisiert, danke nochmal –