[英]Java 9: Generating a runtime image with JLink using 3rd party jars
我想创建一个包含第三方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`
...我收到错误消息:
错误:找不到ExampleUtil模块的module-info.class
有没有办法使用非模块的jar创建运行时映像? 谢谢。
不,jlink要求所有包含的模块都是显式的 ,这意味着它们需要具有模块描述符。 以下是文档中有关jlink模块路径的内容:
jlink工具发现可观察模块的路径。 这些模块可以是模块化JAR文件,JMOD文件或分解模块。
注意缺少“普通JAR”(即没有描述符的JAR)。
您可以将现有的第三方JAR升级为模块化JAR(需要付出一些努力)。 步骤是:
module-info.java
(手动或使用JDeps) --patch-module
将它编译到module-info.class
,告诉编译器有关源代码 jar --update
将模块声明添加到现有JAR 或者,您可以使用像ModiTect这样的工具为您完成这些工作。
jlink直接做不到这一点。 诀窍是在所有外部库上调用jdeps来收集它们的系统模块依赖关系,然后相应地修改参数以进行jlink。 生成module-info.java并不总能解决问题,但您可以使用jdeps查看所需的系统模块,而不是使用包含所有这些系统依赖关系的jlink创建自定义Java运行时,并将外部库放在类路径上或模块路径取决于它们是非模块化罐子还是自动模块罐子。
您可以使用类似特殊maven插件的内容来自动执行该任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.