Ubuntu18.04下Java10+Maven编译JavaFX项目失败求助
核心问题很明确:从Java 10开始,Oracle JDK和OpenJDK都不再捆绑JavaFX模块,你系统里的默认Java 10环境根本没有javafx.graphics、javafx.controls这些模块——这就是java --list-modules | grep fx无输出,以及编译时提示模块找不到的原因。
下面给你两种可行的解决方案,优先推荐Maven依赖管理的方式,更省心:
方案一:通过Maven引入JavaFX依赖(推荐)
修改你的pom.xml,添加JavaFX的依赖并配置编译器参数,让Maven自动下载并管理JavaFX模块:
添加JavaFX依赖
在<project>标签内加入<dependencies>区块,因为你的代码用到了javafx.application和javafx.stage,只需要引入javafx-controls(它会自动依赖javafx-graphics等核心模块):<dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>10.0.2</version> </dependency> </dependencies>更新Maven编译器配置
修改现有的maven-compiler-plugin,添加--add-modules参数指定需要的JavaFX模块:<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <release>10</release> <compilerArgs> <arg>--add-modules</arg> <arg>javafx.controls</arg> </compilerArgs> </configuration> </plugin>(可选)配置运行插件
如果需要通过Maven运行应用,添加exec-maven-plugin来处理模块路径:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>my.test.MyApp</mainClass> <arguments> <argument>--add-modules</argument> <argument>javafx.controls</argument> </arguments> </configuration> </plugin>
完成后,执行mvn clean compile就能正常编译,运行的话用mvn exec:java即可。
方案二:手动使用JavaFX SDK
如果你不想用Maven依赖,也可以手动下载JavaFX SDK并配置模块路径:
- 下载对应Java 10的JavaFX 10.0.2 SDK(选择你的系统版本),解压到本地路径(比如
/opt/javafx-sdk-10.0.2)。 - 编译时指定模块路径和需要的模块:
javac --module-path /opt/javafx-sdk-10.0.2/lib --add-modules javafx.controls MyApp.java - 运行时同样指定模块路径:
java --module-path /opt/javafx-sdk-10.0.2/lib --add-modules javafx.controls MyApp
额外提示
Java 10已经是停止维护的版本了,建议尽量升级到Java 11或更高的LTS版本,搭配对应的JavaFX LTS版本(比如JavaFX 17),这样不仅能获得更好的支持,遇到的问题也会更少。
内容的提问来源于stack exchange,提问作者guigolum

