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

Maven构建JavaFX JAR运行报错:找不到主类及NoClassDefFoundError解决

问题原因
  1. JavaFX未内置在OpenJDK中:从JDK 11开始,Oracle OpenJDK不再将JavaFX作为核心组件包含,JavaFX成为独立的模块化依赖,直接运行普通JAR时JVM无法找到JavaFX的核心类。
  2. 打包产物未包含JavaFX依赖:Maven默认package阶段生成的JAR仅包含项目自身代码,不会自动打包JavaFX这类外部依赖,导致运行时缺少必要的类文件。
  3. 模块路径未正确配置:JavaFX是模块化库,运行时需要通过--module-path指定其依赖位置,直接使用java -jar命令未处理模块路径,无法加载JavaFX模块。
解决方法

方法1:使用JavaFX Maven插件打包(推荐)

javafx-maven-plugin会自动处理JavaFX的模块依赖和打包逻辑,生成可执行的镜像或JAR:

  1. 在pom.xml中添加插件配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version>
            <configuration>
                <mainClass>com.example.demo.Application</mainClass>
            </configuration>
            <executions>
                <execution>
                    <id>bundle</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jlink</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 执行打包命令:
mvn clean package
  1. 打包完成后,target/image目录会生成包含JavaFX依赖的可执行镜像,直接运行对应平台的启动脚本即可;也可以直接用插件启动项目:
mvn javafx:run

方法2:手动指定模块路径运行

如果不想重新打包,可下载JavaFX SDK后手动指定模块路径:

  1. 下载与JDK 17匹配的JavaFX SDK,解压到本地目录。
  2. 执行以下命令运行JAR(替换路径和模块参数):
java --module-path "你的JavaFX SDK路径/lib" --add-modules javafx.controls,javafx.fxml -jar EmailSystem-1.0-SNAPSHOT.jar

提示:若项目用到其他JavaFX模块(如javafx.web),需在--add-modules后补充对应模块名。

方法3:打包成包含所有依赖的胖JAR

使用maven-assembly-plugin将所有依赖打包进一个JAR:

  1. 在pom.xml中添加插件配置:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.4.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.example.demo.Application</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 执行打包命令:
mvn clean package
  1. 运行生成的胖JAR(文件名含jar-with-dependencies):
java -jar EmailSystem-1.0-SNAPSHOT-jar-with-dependencies.jar

注意:这种方式对JavaFX模块化的支持不如javafx-maven-plugin,复杂项目优先选方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:35:25