我想创建一个包含第 3 方 jar 的 Java 9 运行时镜像。我制作了一个简单的 Java 项目(我们称之为 Example
)来调用实用程序 jar(我们称之为 ExampleUtil.jar
)。 Example
包含 src
目录中的 module-info.java
并在 Eclipse 中运行良好(我添加了 ExampleUtil.jar
作为模块依赖)。如果我打电话:
jlink -v
--module-path "C:\Program Files\Java\jdk-9.0.4\jmods";C:\Temp
--add-modules com.example.steven
--output C:\Temp\image.steven
--launcher launch=com.example.steven/com.example.steven`
...我收到错误消息:
Error: module-info.class not found for ExampleUtil module
有没有办法使用不是模块的 jar 来创建运行时镜像?谢谢。
最佳答案
不,jlink 要求所有包含的模块都是显式,这意味着它们需要有一个模块描述符。这是the documentation说到jlink的模块路径:
The path where the jlink tool discovers observable modules. These modules can be modular JAR files, JMOD files, or exploded modules.
请注意没有“普通 JAR”(即没有描述符的 JAR)。
不过,您可以将现有的第三方 JAR 升级为模块化 JAR(需要一些努力)。步骤是:
- 获取 JAR 及其所有依赖项
- 为它创建一个
module-info.java
(手动或使用 JDeps) - 编译成
module-info.class
with--patch-module
to tell the compiler about the sources - 使用
jar --update
将模块声明添加到现有的JAR
或者,您可以使用类似 ModiTect 的工具它会为您做这些事情。
关于Java 9 : Generating a runtime image with JLink using 3rd party jars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408454/