能否使用javapackager部署jlink生成的运行时?
解答你的javapackager与jlink相关问题
我来帮你梳理下这些问题的解决方案:
一、Java Packager和javapackager的关系
其实它们是同一个工具!Java Packager是官方对这个工具的正式称呼,而javapackager就是对应的命令行执行程序。文档里不同章节的表述差异只是叫法不同,本质上是同一个东西,不用纠结名称的区别。
二、用javapackager部署jlink生成的精简运行时
完全可以做到,而且需要调整命令参数来适配模块化jar和自定义运行时的场景,具体操作如下:
1. 解决模块化jar的报错问题
你之前遇到的Modules are not allowed in srcfiles错误,是因为-deploy命令搭配-srcfiles时默认处理非模块化jar。如果是模块化应用,需要改用-module参数替代-appclass,同时用-module-path指定模块化jar的路径,而不是把模块化jar放到-srcfiles里。
2. 指定jlink生成的精简运行时
javapackager的-Bruntime参数不仅可以指定已安装的系统外JRE,还能直接指向jlink生成的自定义精简运行时目录。
3. 完整命令示例
假设你的模块化jar在dist目录下,主模块名为your.module,主类是com.adonax.tanpura.TCDLaunch,jlink生成的精简运行时在./custom-jre目录,那么命令应该改成这样:
javapackager -deploy -native -outdir packages -outfile ToneCircleDrone -module-path dist -module your.module/com.adonax.tanpura.TCDLaunch -name "ToneCircleDrone" -title "ToneCircleDrone test" -Bruntime=./custom-jre
补充说明
- 如果你的应用是非模块化的,但想使用jlink精简运行时,同样可以用
-Bruntime参数指定路径,只要jlink生成运行时时包含了应用依赖的所有必要模块(比如java.desktop等,根据你的应用需求添加)。 - 确保jlink生成的运行时镜像完整包含了应用运行所需的所有模块,否则打包后的应用会出现运行时缺失模块的错误。
内容的提问来源于stack exchange,提问作者Phil Freihofner
相关产品推荐
相关产品推荐

