备忘

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:应用程序的图标文件(可选)。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注