我想创建一个包含第三方罐一个Java运行时9图像。我做了一个简单的Java项目(我们称之为Example
)来调用一个实用工具JAR(我们称之为ExampleUtil.jar
)。 Example
包含在module-info.java
目录src
并在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`
......我得到的错误信息:
错误:模块info.class找不到ExampleUtil模块
有没有一种方法来创建使用不模块罐子运行时的形象?谢谢。
不,JLINK要求所有包含的模块是明确的,这意味着他们需要有一个模块描述符。下面是the documentation说对JLINK的模块路径:
其中JLINK工具发现可观察到的模块的路径。这些模块可以是模块化的JAR文件,JMOD文件,或展开模块。
注意不存在“普通的JAR”(即无JAR文件的描述符)的。
您可以升级现有的第三方JAR文件,以模块化的广口瓶,但(与一些努力)。步骤如下:
module-info.java
为它(手动或使用JDeps)module-info.class
with --patch-module
to tell the compiler about the sourcesjar --update
到模块声明添加到现有的JAR或者,你可以像使用ModiTect,做这些事情对你的工具。
JLINK直接做不到这一点。关键是要呼吁所有外部库jdeps收集他们的系统模块依赖,以及比修改参数进行相应JLINK。生成module-info.java并不总是可行的解决这个问题,但你可以使用jdeps是看你需要什么样的系统模块,比创建一个自定义的Java运行时与JLINK其中包括所有这些系统的依赖,并把外部库在classpath或模块路径取决于依赖如果它们是非模块化瓶或自动模块罐子。
您可以使用像一个特殊的Maven插件自动执行任务。