Java用jpackage打包模块化应用需先确保项目含module-info.java、编译输出至模块路径、主类被导出;推荐用jlink构建精简JRE后再用jpackage生成原生安装包。

Java 使用 jpackage 打包模块化应用,关键在于明确模块路径、主模块名和入口类,并确保运行时镜像或模块依赖已就绪。它不直接处理源码,而是基于已编译的模块结构生成原生安装包。
确认模块化项目结构
模块化应用需满足以下条件:
- 项目根目录下存在
module-info.java,声明模块名及依赖(如requires javafx.controls;) - 编译后输出为模块路径(
--module-path可识别的目录),通常为target/modules或mods - 主类在模块内声明为
public static void main(String[]),且模块描述中导出该包(exports com.example.main;)
打包前准备运行时镜像(推荐)
模块化应用建议先用 jlink 构建精简 JRE,再交由 jpackage 捆绑:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 执行
jlink --module-path mods --add-modules my.module.name --output jre-image --no-header-files --no-man-pages -
my.module.name是你的主模块名,mods是含所有依赖模块的目录 - 生成的
jre-image目录将作为--runtime-image参数传给jpackage
使用 jpackage 命令打包模块化应用
基础命令格式如下(以 Windows 为例):
立即学习“Java免费学习笔记(深入)”;
jpackage \ --name MyApp \ --module-path mods \ --module my.module.name/com.example.Main \ --icon resources/app.ico \ --dest output \ --type exe
-
--module-path指向编译后的模块目录(不含 JDK 模块) -
--module格式为模块名/全限定主类名,中间用斜杠分隔 -
--icon仅 Windows/macOS 支持,Linux 忽略;图标需为平台兼容格式(.ico/.icns/.png) -
--type值取决于目标平台:exe(Windows)、dmg(macOS)、deb(Linux)
平台特定工具需提前安装
不同系统生成安装包依赖外部工具:
- Windows 打
.msi:必须安装 WiX Toolset 3.11+ 并加入 PATH - macOS 打
.pkg:需安装 Xcode 命令行工具(xcode-select --install) - Linux 打
.rpm:需安装rpm-build;打.deb需dpkg-deb和fakeroot

















