如何修复Maven项目中JavaFX的IllegalAccessError异常
JavaFX Maven项目启动错误解决指南
嘿,我看了你遇到的JavaFX Maven项目启动报错,这个问题我之前也踩过坑,核心原因是JavaFX 11及以后版本启用了JPMS模块化系统,而你的项目配置没跟上,导致模块内部API的访问被JVM阻止了。咱们一步步来修复:
1. 修正JavaFX插件的主类配置
你当前的javafx-maven-plugin里配置的<mainClass>org.openjfx.App</mainClass>是错误的,你的主类实际是pom.App,必须改成这个,不然插件找不到正确的启动入口。
2. 调整JavaFX依赖的作用域
JavaFX的依赖只在运行时需要,给javafx-controls和javafx-fxml加上<scope>runtime</scope>,避免编译阶段出现模块冲突。
3. 完善编译插件的Java版本配置
确保maven-compiler-plugin指定了和JavaFX兼容的Java版本(JavaFX 12推荐用Java 11或12),添加source和target参数。
4. 升级JavaFX Maven插件版本
你用的0.0.2版本太老旧了,对模块化的支持不完善,建议升级到稳定的新版本(比如0.0.8)。
修改后的关键配置片段
依赖部分:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>12.0.1</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>12.0.1</version> <scope>runtime</scope> </dependency> </dependencies>
插件部分:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>12</source> <target>12</target> </configuration> </plugin> <!--JAVA FX--> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <configuration> <mainClass>pom.App</mainClass> </configuration> </plugin> <!--end of JAVA FX-->
最后启动项目的正确方式
不要直接运行main方法,而是用Maven命令启动:
mvn clean javafx:run
你的Java代码本身是完全没问题的,只需要调整pom.xml的配置就能解决这个启动错误啦。
内容的提问来源于stack exchange,提问作者giozom1




