如何用Maven编译JavaFX 20 Uber Jar并创建跨平台安装程序?
标准化解决方案:基于Maven+JPackage生成跨平台向导式安装包
首先明确你之前遇到的核心问题:普通Fat Jar(比如shade插件生成的)无法处理JavaFX的native依赖(Windows的dll、macOS的dylib、Linux的so文件),双击运行时系统默认JRE找不到这些依赖,只能通过命令行指定参数启动。而JPackage是OpenJDK官方自带的标准化工具,专门解决这个问题——它能将你的应用、自定义JRE(包含JavaFX及所有依赖)打包成各平台原生的向导式安装程序,完全适配IT知识薄弱的用户需求。
以下是具体实现步骤:
1. 基础环境准备
- 使用JDK 17+(JavaFX 20要求最低JDK17,且JPackage从JDK14开始内置)
- 确保
pom.xml中已正确引入JavaFX依赖(推荐用javafx-maven-plugin自动管理)
2. 配置Maven插件生成自定义JRE镜像
先通过javafx-maven-plugin生成包含JavaFX及所有依赖的自定义JRE镜像,这一步会自动处理native库的打包:
<plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <configuration> <!-- 替换为你的主类全路径 --> <mainClass>com.yourorg.rainforest.Main</mainClass> <!-- 生成的JRE镜像存放目录 --> <jlinkImageName>target/jlink-image</jlinkImageName> <!-- 可选:生成压缩版JRE镜像 --> <jlinkZipName>target/jlink-zip</jlinkZipName> <!-- 如果是非模块化项目,添加以下配置 --> <!-- <modules> <module>javafx.controls</module> <module>javafx.fxml</module> <!-- 按需添加其他JavaFX模块 --> </modules> --> </configuration> </plugin>
执行命令生成JRE镜像:
mvn javafx:jlink
3. 调用JPackage生成平台专属安装包
用exec-maven-plugin集成JPackage命令,直接在Maven中生成向导式安装包(不同平台需单独配置):
Windows(生成MSI向导安装包)
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>jpackage-windows</id> <phase>package</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>jpackage</executable> <arguments> <argument>--type</argument> <argument>msi</argument> <!-- 也可改为exe生成单文件可执行程序 --> <argument>--input</argument> <argument>target/jlink-image</argument> <argument>--dest</argument> <argument>target/installers</argument> <argument>--name</argument> <argument>RainforestMonitor</argument> <!-- 你的应用名称 --> <argument>--main-class</argument> <argument>com.yourorg.rainforest.Main</argument> <argument>--main-jar</argument> <argument>target/your-app-1.0.jar</argument> <!-- 你的应用Jar路径 --> <argument>--vendor</argument> <argument>亚马逊雨林保护组织</argument> <argument>--icon</argument> <argument>src/main/resources/app-icon.ico</argument> <!-- Windows图标格式 --> </arguments> </configuration> </execution> </executions> </plugin>
macOS(生成DMG向导安装包)
复制上述execution块,修改以下参数:
<argument>--type</argument> <argument>dmg</argument> <argument>--icon</argument> <argument>src/main/resources/app-icon.icns</argument> <!-- macOS图标格式 -->
Linux(生成DEB/RPM向导安装包)
复制上述execution块,修改以下参数:
<argument>--type</argument> <argument>deb</argument> <!-- 或rpm,根据发行版选择 --> <argument>--icon</argument> <argument>src/main/resources/app-icon.png</argument> <!-- Linux图标格式 -->
执行命令生成对应平台安装包:
mvn package
关键注意事项
- 需在对应平台上执行打包命令:Windows生成MSI需安装WiX Toolset,macOS生成DMG需安装Xcode命令行工具,Linux生成DEB/RPM需安装
dpkg-dev或rpm-build - 安装包生成后,用户双击即可启动“下一步/下一步/完成”的向导,无需手动安装Java或配置环境
- 如果是模块化项目,无需额外配置模块参数,JPackage会自动识别
module-info.java
内容的提问来源于stack exchange,提问作者Bruno B.
相关产品推荐
相关产品推荐

