- 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/
来自Jigsaw Project : Make it easier for developers to construct and maintain libraries and large appli
我正在尝试创建一个模块化的可执行 jar 文件,它可以使用 java -p -m 运行在 Java 9.0.1 上。 这在使用 jar cfe test.jar test.Main -C clas
maven 是否有适用于新 Java 9 的插件 jlink 我在网上搜索过,但未能从 maven 团队找到任何官方信息。 最佳答案 是。在 Github/maven-plugins 上创建一个已经取
Java 9/10。一个多星期以来,我一直在为一个简单的项目而苦苦挣扎。 正如您在图片中看到的,我想使用 commons-collections 作为一个自动模块(我尝试用 maven 添加它,但效果
Java 的包管理系统对我来说总是简单而有效。它被 JDK 本身大量使用。我们一直在用它来模仿命名空间和模块的概念。 Project Jigsaw(又名 Java Platform Module Sy
我尝试运行一个非常简单的使用 java 9 模块的 gradle 项目,但我收到以下错误。 /home/vadim/IdeaProjects/test_modules/src/main/java/mo
我感觉 Jigsaw 模块于 2017 年 9 月正式随 Java 9 一起发布,这已经是近两年前的事了。 JDK 11 或许还有 JDK 12 在生产中广泛使用,但 Jigsaw 基本上没有被使用,
我正在尝试将我的一个项目分成拼图模块。一个痛点是在多个模块中使用 .jar 库并在其中一些模块中扩展其功能。 更具体地说,我通过 module-info.java 文件中的“需要传递的minimal.
我目前正在评估为桌面应用程序开发插件概念的可能性。 在研究时,我发现了 OSGI 和 Java 平台模块系统(或 Project Jigsaw)。 我对 Java 平台模块系统规范有点困惑。 Java
Java 9 计划很快发布(7 月 27 日)。是否有计划发布符合 Java 9 的模块化 Spring 项目版本(Java 9 项目 Jigsaw)? 最佳答案 关注 module-info.jav
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我在 Eclipse Oxygen.3a 中使用 Java 9.0.4 JUnit 5 位于 modul-path 上,并且在 module-info.java 中是必需的。 当我尝试运行代码时,我总
我了解 Java 平台模块系统 (JPMS) 对大型应用程序的好处,但是否有任何理由将小型库或应用程序制作成(单个)模块?如果是这样,是Modular Jar Files实现此目的的最佳方法,还是首选
Soooo,我想做的本质上是一个拼图游戏。左侧是一个区域,有十几个重叠的“撕开”纸片(所有不同的不规则形状,带有 alpha)的重叠 .png 文件,当放在一起时,按顺序放在右侧,形成一张纸上面有注释
Java 9(特别是 Jigsaw)中是否有任何计划来支持 Java 监控代理的特殊要求? 通常,监控代理需要能够访问默认情况下原始 Java 应用程序不可用的类、包和模块。通过 -javaagent
我目前正在测试使用 jdk-9+149 将 Java 8 应用程序迁移到 Java 9/Jigsaw。 该项目采用标准 Maven 目录布局,即具有 src/main/java , src/test/
我从 w3c 网站下载 Jigsaw 服务器源,http://www.w3.org/Jigsaw/ .我按照它的指示 http://www.w3.org/Jigsaw/Doc/Programmer/c
除了 jigsaw 之外,还有其他 CSS 验证网站吗? ? 意思是 content: none; 不正确,但根据规范应该没问题。 最佳答案 我找到的最好的在线 css 验证器是 http://www
我有以下代码通过访问静态包作用域方法 URL.getURLStreamHandler() 检索在 Java 8 中工作的 http 和 https 默认 URLStreamHandlers: priv
我们有一个不使用 AWT/Swing/JavaFX 的 Java 应用程序,它可以与私有(private)捆绑的 JRE 8 一起正常工作。JRE 9 比 JRE 8 大得多,但我们想让用户使用 JR
我是一名优秀的程序员,十分优秀!