jpackage

返回 JDK 工具

jpackage 是 JDK 14 正式引入的原生安装包打包工具,可将 Java 应用连同 JRE 一起打包为各平台的原生安装程序,用户无需预装 JDK 即可运行。


支持的安装包类型

平台格式说明
WindowsmsiexeMSI 安装包或 EXE 安装向导
macOSpkgdmgmacOS 标准安装包或磁盘映像
LinuxdebrpmDebian/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

默认 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 或公证需额外的签名步骤

相关链接