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

使用GraalVM打包JavaFX原生镜像遇运行错误的解决方案咨询

最佳解决方案

方案一:正确配置javafx-maven-plugin生成适配GraalVM的可执行JAR

javafx-maven-plugin默认jlink目标会生成带JavaFX运行时的ZIP包,要生成纯可执行JAR,需切换到jar目标并配置模块与依赖:

  1. 在pom.xml中添加以下插件配置:
<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.8</version>
    <configuration>
        <!-- 替换为你的主类,格式:模块名/全类名 -->
        <mainClass>com.example.demo/com.example.demo.HelloApplication</mainClass>
        <!-- 替换为你的项目模块名 -->
        <moduleName>com.example.demo</moduleName>
        <!-- 将JavaFX依赖打包进JAR -->
        <attachClasses>true</attachClasses>
    </configuration>
    <executions>
        <execution>
            <id>package-jar</id>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  1. 执行打包命令:
mvn clean package

target目录下会生成带依赖的可执行JAR(命名含jar-with-dependencies),该JAR已正确处理JavaFX模块依赖,可直接用于GraalVM生成原生镜像。

方案二:用GraalVM native-maven-plugin直接生成原生镜像(更高效)

无需单独打JAR,结合JavaFX插件一步完成原生镜像构建:

  1. 准备工作:
    • 安装GraalVM 22.3+(适配JDK17),配置GRAALVM_HOME环境变量
    • 安装native-image组件:
      gu install native-image
      
  2. 在pom.xml中添加插件配置:
<!-- JavaFX基础配置 -->
<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.8</version>
    <configuration>
        <mainClass>com.example.demo/com.example.demo.HelloApplication</mainClass>
        <moduleName>com.example.demo</moduleName>
    </configuration>
</plugin>

<!-- GraalVM原生镜像插件 -->
<plugin>
    <groupId>org.graalvm.buildtools</groupId>
    <artifactId>native-maven-plugin</artifactId>
    <version>0.9.28</version>
    <extensions>true</extensions>
    <executions>
        <execution>
            <id>build-native-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>com.example.demo/com.example.demo.HelloApplication</mainClass>
        <buildArgs>
            <!-- 启用JavaFX资源加载支持,按需添加你的资源后缀 -->
            <arg>-H:IncludeResources=.*\.fxml|.*\.css|.*\.png</arg>
            <arg>-H:+ReportExceptionStackTraces</arg>
        </buildArgs>
    </configuration>
</plugin>
  1. 执行构建命令:
mvn clean package -Pnative

生成的原生可执行文件在target目录下,直接运行即可。

关键注意事项

  • 保留IDEA自动生成的module-info.java,模块化项目对GraalVM兼容性更好
  • 若项目是非模块化的,需在javafx-maven-plugin配置中添加<nonModular>true</nonModular>
  • 原生镜像构建时,必须显式指定要包含的资源(如FXML、图片),否则运行时会找不到资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:50:33