You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:55:18