背景:
在我的组织中有很多基于 Java 的 Windows 桌面应用程序。在我们专有的软件部署系统中,应用程序不包含单独的 JRE / JDK。而是将一个通用 JRE(到目前为止是 Oracle 8 Java SE JRE)部署到用户机器上,它基于环境变量附加到各个应用程序。
我们希望将 JRE 从 Oracle 8 Java SE JRE 迁移到 OpenJDK 11,而无需修改应用程序。从 Java 8 到 Java 11,各种库被删除,例如 JavaFX。使用 Java 模块系统和 jlink 工具,我可以创建自己的使用 OpenJFX 增强的专有 JDK:
jlink --module-path ..\mods;C:\Temp\javafx-jmods-11.0.2 --add-modules=ALL-MODULE-PATH,java.base,java.compiler,java.datatransfer,java.desktop,... --output C:\Temp\OpenJDK+OpenJFX
需要 JavaFX 的应用程序可以使用这个专有的 JDK 而无需更改。
当我尝试将相同的方法应用于最新的 JAXB 测试版时,我收到以下错误:
jlink --module-path ..\mods;C:\Temp\jaxb-ri-2.4.0-b180830.0438\jaxb-ri\mod --add-modules=java.xml.bind,java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,... --output C:\Workspace\Java\OpenJDK_11.0.2_JFX_JAXB
Error: automatic module cannot be used with jlink: java.activation from file:///C:/Temp/jaxb-ri-2.4.0-b180830.0438/jaxb-ri/mod/javax.activation-api.jar
根据https://github.com/eclipse-ee4j/jaf/issues/13,“ JAXB API 使用activation-api 作为其依赖项,并且由于缺少模块信息而被迫将其用作自动模块或来自类路径.java 描述符文件。 ”
此外,根据是否可以在 JDK 11 上使用 jlink 来制作包含已删除的 Java SE EE 模块的运行时?我可以使用 Java 10 中的 jlink 捆绑模块 java.xml.bind,它仍然包含它。如果我将 OpenJDK 10.0.2 中的两个模块添加到模块路径中,则确实 jlink 成功:
jlink --module-path ..\mods;C:\Temp\jdk-10.0.2\jmods\java.xml.bind.jmod;C:\Temp\jdk-10.0.2\jmods\java.activation.jmod --add-modules=java.xml.bind, ...
收到一只叮咚
狐的传说
偶然的你
Helenr
相关分类