Maven构建JavaFX JAR运行报错:找不到主类及NoClassDefFoundError解决
问题原因
- JavaFX未内置在OpenJDK中:从JDK 11开始,Oracle OpenJDK不再将JavaFX作为核心组件包含,JavaFX成为独立的模块化依赖,直接运行普通JAR时JVM无法找到JavaFX的核心类。
- 打包产物未包含JavaFX依赖:Maven默认
package阶段生成的JAR仅包含项目自身代码,不会自动打包JavaFX这类外部依赖,导致运行时缺少必要的类文件。 - 模块路径未正确配置:JavaFX是模块化库,运行时需要通过
--module-path指定其依赖位置,直接使用java -jar命令未处理模块路径,无法加载JavaFX模块。
解决方法
方法1:使用JavaFX Maven插件打包(推荐)
javafx-maven-plugin会自动处理JavaFX的模块依赖和打包逻辑,生成可执行的镜像或JAR:
- 在
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>
- 执行打包命令:
mvn clean package
- 打包完成后,
target/image目录会生成包含JavaFX依赖的可执行镜像,直接运行对应平台的启动脚本即可;也可以直接用插件启动项目:
mvn javafx:run
方法2:手动指定模块路径运行
如果不想重新打包,可下载JavaFX SDK后手动指定模块路径:
- 下载与JDK 17匹配的JavaFX SDK,解压到本地目录。
- 执行以下命令运行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:
- 在
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>
- 执行打包命令:
mvn clean package
- 运行生成的胖JAR(文件名含
jar-with-dependencies):
java -jar EmailSystem-1.0-SNAPSHOT-jar-with-dependencies.jar
注意:这种方式对JavaFX模块化的支持不如
javafx-maven-plugin,复杂项目优先选方法1。
内容的提问来源于stack exchange,提问作者Cienfuegos
相关产品推荐
相关产品推荐

