【发布时间】:2016-03-28 20:31:34
【问题描述】:
在 Jigsaw 之前,替换 OpenJDK 中的一个或多个类非常容易(执行一些测试或做出贡献)。我可以从OpenJDK源复制一个原始文件,例如java/util/ArrayList.java到src/java/util/,添加我想要的任何更改,然后正常编译(输出到mypatch目录):
$ javac.exe src\java\util\ArrayList.java -d mypatch
之后我可以用-Xbootclasspath/p 启动JVM,用打过补丁的ArrayList 替换原来的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 打补丁?
【问题讨论】:
标签: java jvm javac java-9 java-platform-module-system