You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

模块化应用能否不使用JLink直接运行JPackage?

不依赖jlink使用jpackage的可行方案

直接传入完整JRE作为输入

完全可以跳过jlink,直接将完整JRE作为jpackage的运行时输入,这是最直接的捷径。具体操作时,用--runtime-image参数指向你的完整JRE目录即可,比如:

jpackage --type app-image --input ./my-app-dir --main-jar my-app.jar --runtime-image /path/to/your/full-jre

这种方式不用处理任何模块相关的问题,缺点是最终安装包体积会远大于jlink生成的自定义运行时,但完全符合你“不追求最小体积”的需求。

其他可选方案

1. 将应用转为非模块化打包

如果你的模块化应用因自动模块受阻,可以暂时以非模块化方式处理:

  • 用Maven Shade或Gradle Shadow插件,把你的应用jar和所有依赖(包括自动模块)打包成一个fat jar;
  • 再结合完整JRE用jpackage打包,此时指定--main-jar而非模块化相关参数:
    jpackage --type installer --input ./fat-jar-dir --main-jar my-fat-app.jar --runtime-image /path/to/full-jre
    

2. 自动生成模块声明

如果仍想保留模块化特性,可借助工具自动生成缺失的显式模块声明:

  • 用jdeps分析自动模块的依赖并生成模板:
    jdeps --generate-module-info ./output-dir /path/to/your/auto-module.jar
    
  • 生成的模板可能需要小幅调整,之后将编译后的模块声明与原jar合并,就能得到可被jlink识别的显式模块,再正常生成自定义运行时即可。

3. 结合完整JRE与模块参数

针对模块化应用,也可以直接用完整JRE,同时通过--add-modules指定所需模块(包括自动模块):

jpackage --type app-image --module-path ./modules-dir --main-module com.myapp/com.myapp.Main --runtime-image /path/to/full-jre --add-modules com.auto.module,java.desktop

这种方式不用jlink,直接基于完整JRE,同时让jpackage加载指定的模块集。

内容的提问来源于stack exchange,提问作者David Papp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 19:36:10