如何在Linux下为无模块JavaFX应用生成内置JRE的Windows .exe文件
生成包含JRE的Windows可执行EXE方案(Linux环境下交叉编译)
针对你的无模块JavaFX项目,推荐使用OpenJDK自带的jpackage工具打包,它能直接将应用、依赖和JRE整合为Windows原生EXE,无需客户端预先安装Java。以下是具体步骤:
前置准备
- 安装交叉编译依赖(以Ubuntu/Debian为例):
编译Windows程序需要mingw工具链,执行以下命令安装:sudo apt update && sudo apt install binutils mingw-w64 - 下载对应平台文件:
- 下载Windows x64版本的OpenJDK 17(与项目编译版本一致),解压到本地路径(如
./windows-jdk-17) - 下载Windows x64版本的JavaFX 19.0.2,解压后保留
jmods目录或lib目录(后续步骤二选一)
- 下载Windows x64版本的OpenJDK 17(与项目编译版本一致),解压到本地路径(如
步骤1:生成自定义轻量化JRE(可选,减小打包体积)
用jlink从Windows JDK中提取仅需的核心模块(包含JavaFX组件),生成专属JRE:
jlink --module-path ./windows-jdk-17/jmods:./javafx-19.0.2-windows/jmods \ --add-modules javafx.controls,javafx.fxml,java.base,java.desktop \ --output ./custom-windows-jre \ --target-platform windows-x64 \ --strip-debug --compress=2
--strip-debug和--compress=2用于压缩JRE体积,可根据需求调整
步骤2:用jpackage打包生成EXE
基于你已构建的myapp-with-dependencies.jar,执行以下命令生成Windows安装版EXE:
jpackage --type exe \ --input ./target \ --main-jar myapp-with-dependencies.jar \ --main-class my.Main \ --runtime-image ./custom-windows-jre \ --name MyDesktopApp \ --target-platform windows-x64 \ --dest ./target/windows-build
- 若跳过步骤1,可省略
--runtime-image参数,改为指定JavaFX模块路径,让jpackage自动处理JRE:jpackage --type exe \ --input ./target \ --main-jar myapp-with-dependencies.jar \ --main-class my.Main \ --module-path ./javafx-19.0.2-windows/lib \ --add-modules javafx.controls,javafx.fxml \ --name MyDesktopApp \ --target-platform windows-x64 \ --dest ./target/windows-build
补充说明
- 生成的EXE是Windows安装程序,用户运行后会自动将应用和JRE安装到系统中;若需绿色免安装版,可将
--type exe改为--type app-image,生成包含EXE和所有依赖的文件夹,压缩后即可分发 - 项目中的FXML、CSS、Hibernate配置文件已被
maven-assembly-plugin打包进fat jar,无需额外处理,运行时可正常访问 - 若坚持使用launch4j,需将自定义JRE与EXE放在同一目录,在launch4j配置中指定JRE相对路径(如
./jre/bin/java.exe),即可实现免安装运行,但jpackage是官方推荐的更简洁方案
内容的提问来源于stack exchange,提问作者Arzybek
相关产品推荐
相关产品推荐

