使用 (JDK 14+ 引入的官方打包工具)相比 WinRun4J、Launch4j 等第三方工具,具有多项显著优势,尤其在现代 Java 应用分发、安全性、维护性和用户体验方面。以下是其具体优势详解:
jpackage
✅ 1. 官方支持,长期可靠
是 OpenJDK 官方工具(JEP 343),自 JDK 14 起作为 incubator,JDK 16 起正式稳定。由 Oracle 和 OpenJDK 社区持续维护,与新 Java 版本同步演进(如模块系统、安全策略等)。避免了第三方工具(如 WinRun4J)长期不更新导致的兼容性问题(例如对 Java 17+ 模块化、JVM 内部 API 变更的支持)。
jpackage
✅ 2. 自动生成完整原生安装包
不仅生成
jpackage,还能创建平台原生的安装程序:
.exe
Windows: 安装程序(基于 WiX Toolset)或便携式
.exemacOS:
.exe 或
.dmgLinux:
.pkg(Debian/Ubuntu)或
.deb(RHEL/Fedora)
.rpm
用户体验接近原生应用:可添加开始菜单快捷方式、桌面图标、卸载入口等。
示例(Windows 安装包):
1jpackage --input target/libs
2 --main-jar myapp.jar
3 --main-class com.example.Main
4 --name MyApp
5 --type exe
6 --win-dir-chooser
7 --win-menu
8 --win-shortcut
✅ 3. 自动集成定制化 JRE(Runtime Image)
可结合 自动生成最小化 JRE,并将其内嵌到安装包中。无需用户预装 Java,彻底解决“Java 环境缺失”问题。减少分发体积(通常比完整 JRE 小 60–80%)。
jlink
流程示例:
1# Step 1: 用 jlink 创建运行时
2jlink --add-modules java.base,java.desktop,java.logging
3 --output custom-runtime
4 --compress=2 --no-header-files --no-man-pages
5
6# Step 2: 用 jpackage 打包(自动包含 runtime)
7jpackage --runtime-image custom-runtime
8 --input libs
9 --main-jar myapp.jar
10 --main-class com.example.Main
11 --name MyApp
💡 结果:用户安装后得到一个独立、无依赖的 Windows 应用目录,包含私有 JRE。
✅ 4. 更好的安全与签名支持
支持对生成的 和安装程序进行 代码签名(Windows Authenticode):
.exe
1--win-sign
2--win-cert-store ...
3--win-cert-alias ...
避免“未知发布者”警告,提升企业部署可信度。支持设置应用标识(,
--app-version),便于系统识别和管理。
--vendor
✅ 5. 高度可定制的用户体验
自定义应用图标( /
.ico):
.icns
1--icon src/main/resources/app.ico
添加启动画面(Splash Screen):
1--java-options "-splash:splash.png"
控制是否显示控制台窗口(GUI 应用默认无黑框)。设置文件关联(如 文件双击打开你的应用)。
.myproj
✅ 6. 支持 Windows 服务(需额外脚本,但可行)
虽然 本身不直接生成 Windows 服务,但可配合:
jpackage
在安装后执行自定义脚本( + 安装后钩子)使用
--resource-dir 或
WinSW 封装服务逻辑或通过
Apache Procrun 启动一个服务适配器类
--java-options
相比 WinRun4J 的内置服务支持略复杂,但更灵活、可控。
✅ 7. 与构建工具无缝集成
Maven: 使用 或
jpackage-maven-pluginGradle: 使用官方
moditect-maven-plugin 任务或第三方插件(如
jpackage)
badass-jlink-plugin
示例(Gradle):
1plugins {
2 id 'org.beryx.runtime' version '1.12.7'
3}
4
5runtime {
6 modules = ['java.desktop', 'java.logging']
7 jpackage {
8 imageName = 'MyApp'
9 skipInstaller = false
10 installerOptions += ['--win-per-user-install', '--win-dir-chooser']
11 }
12}
✅ 8. 避免第三方工具的局限性
| 问题 | WinRun4J / Launch4j | jpackage |
|---|---|---|
| Java 9+ 模块支持 | ❌ 差或无 | ✅ 原生支持 |
| JRE 捆绑自动化 | ⚠️ 手动复制 | ✅ + 自动集成 |
| 安装程序生成 | ❌ 仅 .exe 启动器 | ✅ 原生安装包 |
| 安全签名 | ❌ 需手动 | ✅ 内置支持 |
| 跨平台一致性 | ⚠️ 配置分散 | ✅ 统一命令,多平台输出 |
⚠️ 注意事项(局限性)
最低 JDK 版本要求:JDK 14+(推荐 JDK 17 LTS 或 JDK 21 LTS)WiX Toolset 依赖(Windows 安装包):需额外安装 WiX(仅用于生成 ,便携式
.msi 不需要)学习曲线:参数较多,初期配置稍复杂(但一次配置,长期受益)
.exe
📌 总结:何时应选择
jpackage?
jpackage
✅ 推荐使用 如果你:
jpackage
使用 Java 11+(尤其是 17/21 LTS)需要 专业级分发体验(安装程序、图标、签名)希望 摆脱对系统 Java 的依赖追求 长期可维护性 和 官方兼容性
❌ 可暂不迁移如果:
仍在维护 Java 8 应用且无升级计划仅需简单 启动器(无安装需求)项目已深度绑定 WinRun4J 服务功能且无替代方案
.exe


