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

如何用javapackager为带jlink自定义运行时的模块化Java应用生成exe?

我来一步步帮你搞定用javapackager结合jlink自定义运行时生成独立.exe的问题——先理清你之前踩的坑,再给你靠谱的操作步骤:

一、先解决javapackager的「No application jars found」错误

你之前的问题核心是混淆了-deploy和-createjar的逻辑:javapackager生成exe的前提是能找到你的应用代码Jar包,而你之前的命令里只指定了类文件目录,没有提供打包好的Jar,所以才会报找不到应用Jar的错误。

正确操作分两步:

  1. 先打包应用代码为可执行Jar
    如果是模块化项目,用jar命令打包(替换成你的实际路径):

    jar --create --file MyApp.jar --main-class myPackage.MyApp -C C:\path\to\target\classes .
    

    这里-C指定你的编译后类文件所在目录,.表示把该目录下所有内容打包到Jar里。

  2. 用javapackager生成嵌入自定义JRE的exe
    关键是要通过--runtime-image参数指定jlink生成的自定义JRE目录(注意是解压后的目录,不是压缩包),这样javapackager会把这个轻量运行时直接嵌入到exe里,生成的文件可以独立运行。命令示例(Windows cmd下换行用^):

    javapackager -deploy -native exe ^
      --add-modules myModule,javafx.graphics,javafx.controls ^
      --module-path "C:\path\to\javafx-jmods;C:\path\to\MyApp.jar" ^
      --runtime-image "C:\path\to\your-jlink-runtime-image" ^
      -outdir "C:\myApp" ^
      -outfile MyApp ^
      -appclass myPackage.MyApp ^
      -name "MyApp" ^
      -Bconsole=false
    

    说明:

    • -Bconsole=false可以隐藏运行时的命令行窗口,符合桌面应用的需求
    • 把打包好的MyApp.jar放到--module-path里,javapackager就能识别到你的应用代码了
    • --runtime-image必须指向jlink生成的完整自定义JRE目录,确保包含所有依赖模块
二、确保jlink生成的自定义JRE包含所有必要模块

在生成自定义JRE时,必须把应用依赖的所有模块都加进去,包括你的业务模块、JavaFX模块以及基础JDK模块(jlink会自动处理依赖,但显式指定更稳妥)。示例jlink命令:

jlink --module-path "C:\path\to\javafx-jmods;C:\path\to\target\classes" ^
  --add-modules myModule,javafx.graphics,javafx.controls ^
  --output "C:\custom-jre" ^
  --strip-debug ^
  --compress 2

--strip-debug和--compress 2可以减小JRE的体积,生成的C:\custom-jre就是只包含你需要的模块的轻量运行时。

三、关于JDK14 jpackage的补充说明

你之前用jpackage生成的是安装程序,这是因为Windows上默认--package-type exe会生成基于Wix的安装包。如果要生成免安装的便携版,需要用--type app-image参数,它会生成一个包含运行时和应用的目录,里面有直接可运行的exe:

jpackage --type app-image ^
  --output "C:\myApp-portable" ^
  --name MyApp ^
  --add-modules myapp,javafx.graphics,javafx.controls ^
  --module-path "C:\path\to\javafx-jmods;C:\path\to\target\classes" ^
  --module myapp/App ^
  --runtime-image "C:\custom-jre"

生成的C:\myApp-portable\MyApp目录里的MyApp.exe可以直接双击运行,不需要安装,而且自带自定义JRE。如果需要单文件exe,可以用Enigma Virtual Box这类工具把整个目录打包成单个可执行文件。

四、验证生成的exe

最后记得做两个验证:

  • 直接双击exe,确认应用正常启动,没有多余的命令行窗口
  • 把exe所在的整个目录复制到没有安装JRE的Win10电脑上,测试是否能独立运行,确保运行时已经正确嵌入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:22:11