jpackage 是 jdk 14+ 内置工具,可将 java 应用打包为 windows(.exe/.msi)、macos(.app/.pkg)、linux(.deb/.rpm)等原生安装包;需 jdk ≥14(推荐17/21 lts),应用须能通过 java -jar 或 java -m 正常运行,支持模块化与非模块化项目,命令通过 --input/--main-jar 或 --module-path/--module 指定入口。

Java 14+ 内置的 jpackage 工具可以直接将模块化(或非模块化)Java 应用打包成 Windows(.exe/.msi)、macOS(.app/.pkg)、Linux(.deb/.rpm)等原生安装包,无需第三方工具。关键前提是:应用需能通过 java -m 正常启动(即有明确模块名和主类),且 JDK 版本 ≥ 14(推荐使用 JDK 17/21 等 LTS 版本)。
确认应用已模块化并可运行
你的项目应包含 module-info.java,例如:
module com.example.myapp {
requires java.desktop;
exports com.example.myapp;
// 主类必须在 exported 包中,且含 public static void main
}
编译后生成模块 JAR(如 myapp.jar),并确保能用以下命令成功运行:
java -p myapp.jar -m com.example.myapp/com.example.myapp.MainApp
若尚未模块化,也可用 --name + --input + --main-jar 组合绕过模块要求(见下文)。
基础 jpackage 命令结构
最简可用命令(以 Windows 为例):
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
jpackage \ --name MyApp \ --input target/libs \ --main-jar myapp.jar \ --main-class com.example.myapp.MainApp \ --type exe \ --win-console
说明:
-
--input指向含所有依赖 JAR 的目录(如target/libs/),jpackage会自动收集 -
--main-jar是启动入口 JAR(不必是模块 JAR;若为模块 JAR,建议配合--module使用) -
--main-class必须显式指定(即使 JAR 的 MANIFEST.MF 中有Main-Class) -
--type exe生成 Windows 可执行安装包;其他常用值:msi、app(macOS)、pkg、deb、rpm -
--win-console保留控制台窗口(适合调试或命令行工具);GUI 应用可省略
模块化应用的推荐写法(更规范)
如果你的应用已正确模块化,优先使用 --module 而非 --main-jar:
jpackage \ --name MyApp \ --module-path target/modules \ --module com.example.myapp/com.example.myapp.MainApp \ --type msi \ --win-menu \ --win-shortcut
说明:
-
--module-path指向模块 JAR 所在目录(每个 JAR 应是独立模块) -
--module格式为<module-name>/<main-class></main-class></module-name>,与java -m一致 -
--win-menu和--win-shortcut会在开始菜单和桌面创建快捷方式 - macOS 可加
--app-icon icon.icns,Linux 可加--linux-app-image定制图标和 desktop 文件
常见问题与绕过技巧
遇到报错?试试这些:
-
“Unable to locate Java runtime”:确保用
jpackage所在 JDK 启动(不是 JRE),且该 JDK 支持目标平台(如 macOS 上不能生成 .msi) -
依赖缺失:把所有第三方 JAR 放入
--input目录;若用--module-path,则每个 JAR 必须自带module-info.class -
非模块化但想用模块路径:用
jlink构建自定义运行时镜像,再传给jpackage --runtime-image -
需要配置 JVM 参数或环境变量:用
--java-options "-Xmx512m"或--app-version "1.0.0"等参数增强分发信息
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










