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

如何在Maven编译的自执行JAR包中嵌入JDK?(JavaFX项目场景)

如何在Maven+JavaFX项目中嵌入JDK制作独立可执行应用

你在Win10的IntelliJ CE环境下开发Maven+JavaFX项目,已经搞定了除JDK外的依赖打包,现在想把JDK也嵌进去让无Java环境的用户直接运行——这个需求用Java官方的jlink+jpackage方案最靠谱,也可以用第三方Maven插件简化流程,下面给你一步步讲:

Java 9+的模块化系统和jlink工具可以帮你裁剪出只包含项目所需的JDK模块(不是完整JDK,体积更小),再用jpackage做成exe或安装包,用户双击就能运行,完全不需要装Java。

这个插件帮你自动执行jlink生成自定义JDK runtime,把以下配置加到你的pom.xml的<build><plugins>里:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jlink-plugin</artifactId>
    <version>3.1.0</version>
    <extensions>true</extensions>
    <configuration>
        <!-- 指定你的主类,格式是 模块名/全限定类名 -->
        <mainClass>Appiculture/com.base.Main</mainClass>
        <!-- 生成的runtime目录名称 -->
        <outputDirectory>${project.build.directory}/runtime</outputDirectory>
        <!-- 裁剪JDK,只保留项目用到的模块 -->
        <stripDebug>true</stripDebug>
        <noHeaderFiles>true</noHeaderFiles>
        <noManPages>true</noManPages>
        <!-- 自动包含依赖模块 -->
        <modulePath>
            <path>${project.build.directory}/modules</path>
        </modulePath>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>jlink</goal>
            </goals>
        </execution>
    </executions>
</plugin>

步骤2:生成自定义JDK runtime

在IntelliJ的Terminal里执行:

mvn clean package

执行完后,target/runtime目录就是包含裁剪后JDK和你项目代码的运行环境。

步骤3:用jpackage制作可执行程序

打开命令提示符(cmd),切换到你的项目根目录,执行jpackage命令(JDK自带的工具,路径在你本地JDK的bin目录下):

jpackage --name Appiculture --input target/runtime/bin --main-jar your-project-jar-name.jar --type exe --dest target/installer

替换your-project-jar-name.jar为你实际生成的JAR文件名,执行后target/installer里会生成exe安装包,用户安装后就能直接运行。

方案二:用第三方插件简化流程(runtime-maven-plugin)

如果觉得上面的步骤麻烦,可以用org.beryx.runtime插件,它把jlink和jpackage的流程整合起来,一键生成包含JDK的独立应用:

步骤1:添加插件到pom.xml

<plugin>
    <groupId>org.beryx.runtime</groupId>
    <artifactId>runtime-maven-plugin</artifactId>
    <version>1.15.0</version>
    <configuration>
        <mainClass>Appiculture/com.base.Main</mainClass>
        <!-- 生成exe格式的可执行文件 -->
        <packageType>exe</packageType>
        <!-- 应用名称和输出目录 -->
        <appName>Appiculture</appName>
        <outputDirectory>${project.build.directory}/app</outputDirectory>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

步骤2:一键生成独立应用

执行以下命令,插件会自动完成JDK裁剪、打包和exe生成:

mvn clean package

生成的应用在target/app目录下,直接把整个目录发给用户就能运行。

注意事项

  • 你的module-info.java已经正确声明了依赖模块,这两个方案都能自动识别并包含所需的JDK和JavaFX模块,不需要额外配置。
  • 如果你执意要打单个包含JDK的JAR,官方其实不推荐(因为模块化JDK无法直接塞进普通JAR),可以尝试用Capsule等工具,但稳定性不如上面的方案。
  • 确保你本地安装的是JDK 11+(JavaFX 11+才支持模块化打包),并且IntelliJ的项目SDK已经正确配置为这个JDK。

内容的提问来源于stack exchange,提问作者aaNti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:17:32