存在module-info.java时Maven编译报错找不到JavaFX包如何解决
问题根因
- 带
module-info.java的项目属于Java 9+模块化项目,只会从**模块路径(module-path)**加载依赖模块,你当前使用的maven-compiler-plugin未做模块化相关配置,Maven默认会把所有依赖放到类路径(classpath)下,导致JavaFX的模块无法被识别。 - 你当前使用的3.8.1版本maven-compiler-plugin对模块化编译的支持存在已知bug,容易出现模块路径识别失效的问题。
- pom中缺少
javafx.base的显式依赖声明,即便它是其他JavaFX组件的传递依赖,模块化编译阶段也可能无法自动识别。
解决方案
- 补全JavaFX依赖并移除optional标记,在pom的
dependencies节点下新增javafx.base依赖,同时删除原有三个JavaFX依赖中的<optional>true</optional>配置:
<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx.base</artifactId> <version>17</version> </dependency>
- 升级并配置maven-compiler-plugin,将插件版本升级到3.11.0及以上,同时增加模块化编译参数:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>11</release> <compilerArgs> <arg>--module-path</arg> <arg>${project.build.directory}/modules</arg> </compilerArgs> </configuration> </plugin>
其中<release>标签的值和你使用的JDK版本保持一致即可。
- 新增maven-dependency-plugin配置,在编译前将所有编译级依赖拷贝到模块路径对应的目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <phase>process-sources</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/modules</outputDirectory> <includeScope>compile</includeScope> </configuration> </execution> </executions> </plugin>
- 执行
mvn clean compile测试构建即可。如果Eclipse IDE内依然存在JavaFX相关报错,右键项目选择Maven->Update Project,勾选强制更新快照/发布版本选项同步配置即可。
内容的提问来源于stack exchange,提问作者MarekChr
相关产品推荐
相关产品推荐

