Java 9:使用第三方jar生成JLink的运行时映像

我想创建一个包含第三方jar的Java 9运行时映像.我创建了一个简单的Java项目(让我们调用这个例子)来调用一个实用程序jar(让我们调用这个ExampleUtil.jar).示例包含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:使用第三方jar生成JLink的运行时映像 - 代码日志