零依赖!一键生成JavaFX应用的EXE文件:jpackage+BAT脚本终极教程

344 阅读3分钟

以下是通过批处理脚本结合jpackage工具实现JavaFX项目无依赖打包的完整方案,脚本将自动完成模块编译、运行时镜像生成和EXE打包流程:


无依赖打包批处理脚本(package.bat)​

bat
复制
@echo off
setlocal enabledelayedexpansion

REM ========== 配置参数 ==========
set PROJECT_NAME=MyJavaFXApp
set MAIN_MODULE=hellofx/hellofx.Main  # 格式: 模块名/主类全路径
set JAVA_FX_PATH=C:\javafx-sdk-17.0.2\lib  # JavaFX SDK路径
set ICON_PATH=app.ico  # 应用图标(可选)

REM ========== 编译模块 ==========
echo [Step 1] 编译JavaFX模块...
javac --module-path "%JAVA_FX_PATH%" --add-modules javafx.controls -d mods src*.java module-info.java
if errorlevel 1 (
    echo [错误] 编译失败,请检查模块路径和代码!
    exit /b 1
)

REM ========== 生成运行时镜像 ==========
echo [Step 2] 生成精简JRE...
jlink ^
    --module-path "%JAVA_FX_PATH%;mods" ^
    --add-modules hellofx,javafx.controls ^
    --output custom-jre ^
    --strip-debug ^
    --compress 2
if errorlevel 1 (
    echo [错误] JRE生成失败,检查模块依赖!
    exit /b 1
)

REM ========== 使用jpackage打包EXE ==========
echo [Step 3] 生成无依赖EXE...
jpackage ^
    --name %PROJECT_NAME% ^
    --module %MAIN_MODULE% ^
    --runtime-image custom-jre ^
    --type app-image ^
    --dest release ^
    --icon "%ICON_PATH%" ^
    --win-shortcut
if errorlevel 1 (
    echo [错误] 打包失败,请检查jpackage参数!
    exit /b 1
)

echo 成功生成EXE文件: release%PROJECT_NAME%\
pause

关键步骤说明

1. ​配置参数

  • JAVA_FX_PATH:需替换为本地JavaFX SDK的lib目录路径
  • MAIN_MODULE:需对应module-info.java中声明的模块名和主类路径

2. ​模块化编译

  • 通过javac命令编译项目,需包含module-info.java文件声明依赖(如requires javafx.controls;
  • 编译后的.class文件输出到mods目录,确保模块路径包含JavaFX SDK

3. ​生成精简JRE

  • 使用jlink从模块中提取最小运行时,仅包含javafx.controls等必要模块
  • --strip-debug--compress 2参数可减少运行时体积约40%

4. ​打包无依赖EXE

  • --type app-image生成可直接运行的文件夹(包含EXE和JRE)
  • --runtime-image指向自定义JRE目录,实现无外部依赖
  • 最终EXE文件位于release\项目名称目录中,可直接分发

环境准备

  1. JDK 17+​​:需安装JDK并配置JAVA_HOME环境变量
  2. JavaFX SDK​:从Gluon官网下载对应版本,解压后配置JAVA_FX_PATH
  3. WiX Toolset​(可选):若需生成MSI安装包,需安装WiX 3.11+

验证流程

  1. 运行脚本​:双击执行package.bat,观察控制台输出是否成功

  2. 检查输出​:确认release\项目名称目录包含:

    • 项目名称.exe(主程序)
    • runtime(嵌入式JRE)
    • app(应用资源)
  3. 跨机测试​:将整个文件夹复制到无Java环境的Windows机器,双击EXE验证能否运行


常见问题解决

  • 错误:找不到主类
    检查MAIN_MODULE参数是否与module-info.java中的模块名一致
  • JavaFX组件缺失
    jlink命令的--add-modules中添加缺失模块(如javafx.fxml
  • 图标不显示
    确保ICON_PATH指向有效的.ico文件,建议尺寸256x256像素

通过此方案,可生成完全独立的EXE文件,用户无需安装Java环境即可运行。如需进一步优化体积,可研究GraalVM Native Image技术。 码觉客微信公众号