使用jpackage有哪些具体优势?

使用
jpackage
(JDK 14+ 引入的官方打包工具)相比 WinRun4J、Launch4j 等第三方工具,具有多项显著优势,尤其在现代 Java 应用分发、安全性、维护性和用户体验方面。以下是其具体优势详解:


✅ 1. 官方支持,长期可靠


jpackage
 是 OpenJDK 官方工具(JEP 343),自 JDK 14 起作为 incubator,JDK 16 起正式稳定。由 Oracle 和 OpenJDK 社区持续维护,与新 Java 版本同步演进(如模块系统、安全策略等)。避免了第三方工具(如 WinRun4J)长期不更新导致的兼容性问题(例如对 Java 17+ 模块化、JVM 内部 API 变更的支持)。


✅ 2. 自动生成完整原生安装包


jpackage
不仅生成
.exe
,还能创建平台原生的安装程序

Windows
.exe
 安装程序(基于 WiX Toolset)或便携式 
.exe
macOS
.dmg
 或 
.pkg
Linux
.deb
(Debian/Ubuntu)或 
.rpm
(RHEL/Fedora)

用户体验接近原生应用:可添加开始菜单快捷方式、桌面图标、卸载入口等。

示例(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)

可结合 
jlink
 自动生成最小化 JRE,并将其内嵌到安装包中。无需用户预装 Java,彻底解决“Java 环境缺失”问题。减少分发体积(通常比完整 JRE 小 60–80%)。

流程示例:



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. 更好的安全与签名支持

支持对生成的 
.exe
 和安装程序进行 代码签名(Windows Authenticode):



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 服务(需额外脚本,但可行)

虽然
jpackage
本身不直接生成 Windows 服务,但可配合:

在安装后执行自定义脚本(
--resource-dir
 + 安装后钩子)使用 
WinSW
 或 
Apache Procrun
 封装服务逻辑或通过 
--java-options
 启动一个服务适配器类

相比 WinRun4J 的内置服务支持略复杂,但更灵活、可控。


✅ 7. 与构建工具无缝集成

Maven: 使用 
jpackage-maven-plugin
 或 
moditect-maven-plugin
Gradle: 使用官方 
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 捆绑自动化 ⚠️ 手动复制 ✅ 
jlink
 + 自动集成
安装程序生成 ❌ 仅 .exe 启动器 ✅ 原生安装包
安全签名 ❌ 需手动 ✅ 内置支持
跨平台一致性 ⚠️ 配置分散 ✅ 统一命令,多平台输出

⚠️ 注意事项(局限性)

最低 JDK 版本要求:JDK 14+(推荐 JDK 17 LTS 或 JDK 21 LTS)WiX Toolset 依赖(Windows 安装包):需额外安装 WiX(仅用于生成 
.msi
,便携式 
.exe
 不需要)学习曲线:参数较多,初期配置稍复杂(但一次配置,长期受益)


📌 总结:何时应选择 
jpackage

推荐使用
jpackage
如果你:

使用 Java 11+(尤其是 17/21 LTS)需要 专业级分发体验(安装程序、图标、签名)希望 摆脱对系统 Java 的依赖追求 长期可维护性 和 官方兼容性

可暂不迁移如果:

仍在维护 Java 8 应用且无升级计划仅需简单 
.exe
 启动器(无安装需求)项目已深度绑定 WinRun4J 服务功能且无替代方案

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...