如何解决Java 17下Spring Boot JavaFX Maven项目运行问题
解决Spring Boot + JavaFX项目运行时"JavaFX runtime components are missing"的简便方案
本地运行(mvn spring-boot:run)解决方案
直接在pom.xml里配置Spring Boot Maven插件,传递JavaFX模块参数,同时引入对应平台的JavaFX依赖,无需手动下载SDK:
- 添加JavaFX依赖到
dependencies节点(根据你的操作系统替换classifier值,可选win/mac/linux):
<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17.0.9</version> <classifier>win</classifier> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>17.0.9</version> <classifier>win</classifier> </dependency>
- 配置Spring Boot Maven插件,添加JVM参数启用JavaFX模块:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments>--add-modules javafx.controls,javafx.fxml</jvmArguments> </configuration> </plugin> </plugins> </build>
配置完成后,直接执行mvn spring-boot:run即可正常启动项目,不会再出现"JavaFX runtime components are missing"错误。
打包后运行(java -jar)解决方案
之前执行java -jar app.jar无报错但GUI不显示,是因为JVM未加载JavaFX模块,只需在运行命令中添加模块参数即可:
java --add-modules javafx.controls,javafx.fxml -jar app.jar
如果想避免每次手动输入参数,也可以在pom.xml中配置Spring Boot插件生成可直接运行的包:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> <jvmArguments>--add-modules javafx.controls,javafx.fxml</jvmArguments> </configuration> </plugin>
执行mvn package后,生成的jar包可直接双击运行(Windows/macOS),或通过./app.jar(Linux)启动,无需额外参数。
为什么无需模块化改造?
Spring Boot项目确实不强制要求模块化,上述方案通过传递JVM模块参数+引入JavaFX依赖的方式,既满足JavaFX的运行要求,又不需要修改项目结构进行模块化改造,完全符合简便需求。
内容的提问来源于stack exchange,提问作者Rainbow
相关产品推荐
相关产品推荐

