Jigsaw 以前は、OpenJDK の 1 つまたは複数のクラスを置き換えるのは非常に簡単でした (何らかのテストを実行したり、貢献したりするため)。たとえば、元のファイルを OpenJDK ソースから にコピーし、java/util/ArrayList.java
必要src/java/util/
な変更を追加してから、通常どおりコンパイルします (mypatch
ディレクトリに出力します)。
$ javac.exe src\java\util\ArrayList.java -d mypatch
その後、JVM を起動してオリジナルをパッチ適用済みのもの-Xbootclasspath/p
に置き換えることができます。ArrayList
$ java -Xbootclasspath/p:mypatch MyTestClass
ただし、Java 9-ea+111 での Jigsaw 統合以降、これは機能しなくなりました。コンパイル コマンドは、次のように始まる大量のエラーを報告します。
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
^
また、古い JDK でコンパイルしても、JVM を起動できません。
-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.
Jigsaw で JDK のパッチを作成するには?