jpackage
→ 返回 JDK 工具
jpackage 是 JDK 14 正式引入的原生安装包打包工具,可将 Java 应用连同 JRE 一起打包为各平台的原生安装程序,用户无需预装 JDK 即可运行。
支持的安装包类型
| 平台 | 格式 | 说明 |
|---|
| Windows | msi、exe | MSI 安装包或 EXE 安装向导 |
| macOS | pkg、dmg | macOS 标准安装包或磁盘映像 |
| Linux | deb、rpm | Debian/Ubuntu 或 Red Hat 系发行版包 |
基本用法
# 从 jar 打包为当前平台默认格式
jpackage \
--name MyApp \
--input lib/ \
--main-jar app.jar \
--main-class com.example.Main
# 指定输出目录和安装包类型
jpackage \
--name MyApp \
--input lib/ \
--main-jar app.jar \
--main-class com.example.Main \
--type msi \
--dest dist/
# 指定应用版本和图标
jpackage \
--name MyApp \
--app-version 1.2.0 \
--icon assets/icon.ico \
--input lib/ \
--main-jar app.jar \
--main-class com.example.Main
常用选项
基础
| 选项 | 说明 |
|---|
--name <name> | 应用名称 |
--app-version <version> | 应用版本号(默认 1.0) |
--type <type> | 安装包类型(msi/exe/pkg/dmg/deb/rpm/app-image) |
--dest <dir> | 输出目录(默认当前目录) |
--input <dir> | 包含 jar 等资源的输入目录 |
--main-jar <jar> | 主 JAR 文件(相对于 --input) |
--main-class <class> | 主类全限定名 |
--icon <file> | 应用图标(.ico/.icns/.png) |
--description <text> | 应用描述 |
--vendor <text> | 发布者名称 |
运行时与 JVM
| 选项 | 说明 |
|---|
--runtime-image <dir> | 使用 jlink 裁剪后的自定义 JRE(缩减体积) |
--java-options <opts> | 传给 JVM 的参数(如 -Xmx512m) |
--arguments <args> | 传给主类的默认参数 |
平台特定(Windows)
| 选项 | 说明 |
|---|
--win-menu | 创建开始菜单快捷方式 |
--win-shortcut | 创建桌面快捷方式 |
--win-dir-chooser | 安装时允许用户选择目录 |
--win-upgrade-uuid <uuid> | 升级标识 UUID(同一应用不同版本保持一致) |
平台特定(macOS)
| 选项 | 说明 |
|---|
--mac-package-identifier <id> | Bundle ID(如 com.example.myapp) |
--mac-sign | 对包进行代码签名 |
--mac-signing-key-user-name <name> | 签名证书 CN |
与 jlink 配合缩减体积
默认 jpackage 会打包完整 JRE(约 200 MB+)。配合 jlink 先裁剪出只含必要模块的运行时,可大幅减小体积:
# 1. 用 jlink 生成最小运行时
jlink \
--module-path $JAVA_HOME/jmods \
--add-modules java.base,java.desktop,java.logging \
--output custom-jre \
--strip-debug \
--compress=2
# 2. 用 jpackage 引用裁剪后的运行时
jpackage \
--name MyApp \
--runtime-image custom-jre \
--input lib/ \
--main-jar app.jar \
--main-class com.example.Main
典型工作流
┌─────────────┐ mvn/gradle package ┌──────────────┐
│ 源码 + 资源 │ ──────────────────────→ │ app.jar │
└─────────────┘ └──────┬───────┘
│
┌──────────▼──────────┐
jlink ─────→ custom-jre(可选) │
└──────────┬──────────┘
│
┌──────────▼──────────┐
jpackage ──→ .msi / .dmg / .deb │
└─────────────────────┘
注意事项
- 只能在目标平台上打包对应格式:macOS 打
dmg、Windows 打 msi,无法跨平台(需 CI/CD 多平台 runner)
- Windows 打
msi 需安装 WiX Toolset(3.x)
- macOS 发布到 App Store 或公证需额外的签名步骤
相关链接