- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 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
然而,自从 Jigsaw 集成到 Java 9-ea+111 以来,这不再有效。编译命令报告大量错误,如下所示:
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补丁?
最佳答案
从 javac 的错误信息中你可以知道你正在编译的类属于 java.base
模块。现在要编译 JDK 类,您必须指定它属于 --patch-module
的模块。参数:
$ javac --patch-module java.base=src -d mypatch \
src/java.base/java/util/ArrayList.java
现在要用新类替换现有类,请使用 --patch-module <module-name>
JVM 参数:
$ java --patch-module java.base=mypatch MyTestClass
这里我们应该指定目录,其中包含以相应模块命名的子目录。现在一切都像以前一样工作。如果您修补了多个模块,您可以多次指定:
$ java --patch-module java.base=mypatch --patch-module java.xml=myxmlpatch MyTestClass
关于java - 如何在集成了 Jigsaw 的情况下为 OpenJDK 9 打补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270671/
我一直在做一个用 git 维护的项目。我从以前处理过它的人那里得到了一堆补丁。但他不记得他使用的是哪个版本的源代码。 (或者如果他在开始工作之前已经对 repo 进行了分支)。当我尝试应用补丁时,其中
我知道有一种方法可以使用 git am 将补丁应用到我的提交中。我一直在使用命令 patch -pnum Date: Sun, 1 Feb 2015 02:33:35 +0100 Subject:
DCEVM 如何给 JVM 打补丁,使其既可以在正常模式下启动,也可以在 XXaltjvm 模式下启动?它对常规 libjvm.so/jvm.dll/libjvm.dylib 有什么作用? From
DCEVM 如何给 JVM 打补丁,使其既可以在正常模式下启动,也可以在 XXaltjvm 模式下启动?它对常规 libjvm.so/jvm.dll/libjvm.dylib 有什么作用? From
我有一个这样的程序 #include int somma(x,y){ return x+y; } int diff(x,y){ return x-y; } int main(){ int
当向应用商店提交应用更新(通过 iTunes Connect?)时,更新是否一定是整个二进制文件?更新可以补丁的形式出现吗?如果应用的第二个版本与前一个版本共享大量 Assets 和逻辑,那么所有这些
我安装了 pytest-mock并使用模拟程序我试图像补丁一样运行,但我得到“类型错误:需要一个有效的目标来打补丁。你提供了'return a + b'” # test_capitalize.py i
我正在尝试使用 Mock 模块和 pytest 进行单元测试。 我希望 os.path.isdir() 返回 False,并且 os.mkdir() 不运行;我只想验证传递给它的参数是否正确。 我觉得
在 Jigsaw 之前,替换 OpenJDK 中的一个或多个类非常容易(执行一些测试或做出贡献)。我可以从 OpenJDK 源复制一个原始文件,例如 java/util/ArrayList.java
我的应用程序是一个纯 Java 包,它集成了一个嵌入式 Web 容器并处理 Oauth 2.0 身份验证流程。 运行跟踪 我已经通过使用 JAVA_OPTS="-Djavax.net.debug=ss
大约 1 个月前,我看到我的应用程序(xap 文件)被黑客攻击并发布在太多分发 Windows Phone 8 XAP 的网站上,如果您从 Windows 商店下载 XAP,则无法解压缩它的内容,但是
我是一名优秀的程序员,十分优秀!