Java客户端打包exe安装包
准备做一个PC客户端,javafx web 做一个架子,由H5提供交互能力。 一开始使用的是 Jlink+Jpackage,不过打包安装后窗口访问页面会丢失图片与样式,没找到解决办法,只知道是 Jlink 生成运行环境时少了什么东西。 转而使用 Launch4j+Inno Setup,直接打包整个 jre 与 javafx 模块,确实方便,没遇到任何问题,而且配置更灵活。
Launch4j+Inno Setup
这两个程序操作都有UI界面,配置简单。 注意点: 1. Launch4j 生成的 exe 仅为启动程序,配置相关文件时需要使用相对路径(相对于 exe 生成的位置),使程序可以安装在任何位置。一个小技巧是先用 Inno Setup 生成安装包,安装后再用 Launch4j 基于安装后的文件目录配置相对路径生成 exe,生成 exe 时指定使用外部 jar 后面都不用再重复生成了,可以一直用这个 exe 来打包。 2. Inno Setup 的配置文件可以使用相对路径(相对于配置文件的位置),方便git协作时不用再重新配置路径。
Jlink+Jpackage
# mac 环境 ## 指定环境 ```` java_home21=/Users/zhuangjiali/Library/Java/JavaVirtualMachines/corretto-21.0.5/Contents/Home current_dir=/Users/zhuangjiali/workspace/CloudVoyageClient ```` ## maven 打包后测试运行 ```` $java_home21/bin/java \ --module-path $current_dir/support/mac/javafx-sdk-21.0.5/lib --add-modules javafx.controls,javafx.web \ -jar \ $current_dir/target/CloudVoyageClient-1.0-SNAPSHOT.jar ```` ## 生成运行时环境 ```` jlink \ --module-path $JAVA_HOME/jmods:$current_dir/support/mac/javafx-jmods-21.0.5 \ --add-modules javafx.controls,javafx.web \ --output $current_dir/runtime-mac ```` ## 从 Java 14 开始,jpackage 是官方推荐的打包工具,可以用来生成 Windows 安装包。 ```` jpackage --input $current_dir/target \ --name X云票务客户端 \ --main-jar CloudVoyageClient-1.0-SNAPSHOT.jar \ --main-class com.scnyw.cloudvoyageclient.H5AppLauncher \ --runtime-image $current_dir/runtime-mac \ --icon $current_dir/src/main/resources/app-mac.icns \ --type dmg ```` # win 环境生成 ## 指定环境 ```` set java_home21=C:\Program Files\Java\jdk-21 set current_dir=Z:\workspace\CloudVoyageClient ```` ## maven 打包后测试运行 ```` "%java_home21%/bin/java" ^ --module-path "%current_dir%/support/win/javafx-sdk-21.0.5/lib" ^ --add-modules javafx.controls,javafx.web ^ -jar "%current_dir%/target/CloudVoyageClient-1.0-SNAPSHOT.jar" ```` ## 生成运行时环境 ```` jlink ^ --module-path "%java_home21%";"%current_dir%/support/win/javafx-jmods-21.0.5" ^ --add-modules javafx.controls,javafx.web ^ --output "%current_dir%/runtime" ```` ## 从 Java 14 开始,jpackage 是官方推荐的打包工具,可以用来生成 Windows 安装包。 ```` jpackage --input "%current_dir%/target" ^ --name X云票务客户端 ^ --main-jar CloudVoyageClient-1.0-SNAPSHOT.jar ^ --main-class com.scnyw.cloudvoyageclient.H5AppLauncher ^ --runtime-image "%current_dir%/runtime" ^ --icon "%current_dir%/src/main/resources/app.ico" ^ --type exe ^ --win-shortcut ^ --win-dir-chooser ^ --win-menu ^ --win-menu-group "X云软件" ^ --app-version "1.0" ^ --vendor "四川X云科技有限公司" ^ --description "一个高效的票务客户端工具" ^ --copyright "Copyright © 2024 四川X云科技有限公司" ```` --java-options "--module-path lib --add-modules javafx.controls,javafx.web" \ • --input:输入文件夹,包含项目的 JAR 文件和依赖项。 • --name:应用程序名称。 • --main-jar:主 JAR 文件。 • --main-class:主类的全限定名(带包路径)。 • --type:输出包类型(exe 是 Windows 安装包)。 • --runtime-image:前一步 jlink 生成的自包含运行时。 • --icon:应用程序的图标文件(可选)。