NetBeans中Maven Java项目编译运行失败如何排查解决
问题根因
编译失败和Maven settings.xml 配置无关,也不存在插件无法识别的问题——从日志可以看到maven-resources-plugin、maven-compiler-plugin、exec-maven-plugin都正常加载执行了。
注意:不需要浪费时间排查settings.xml配置,该文件没有异常。
真正的报错原因是项目内置的Lombok版本过低,没有适配JDK 18的Java模块系统封装规则。JDK 16及以上版本默认不开放编译器内部API的访问权限,旧版Lombok无法调用com.sun.tools.javac.processing包下的类,直接抛出IllegalAccessError导致编译终止。
修复方案
任选一种方案处理即可:
- 优先选择升级Lombok依赖:把pom.xml里Lombok的版本升级到1.18.22及以上(推荐用最新稳定版1.18.32),新版本已经原生适配JDK 18的模块规则,不需要额外配置参数,改完刷新Maven依赖重新编译即可正常运行,依赖配置参考:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> <scope>provided</scope> </dependency>
- 临时兼容方案:如果暂时不能升级Lombok版本,就在
maven-compiler-plugin的配置中添加编译参数,强制开放JDK编译器的内部模块访问权限,配置参考:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <fork>true</fork> <compilerArgs> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> <arg>--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin>
- 环境降级方案:直接将本地使用的JDK版本切换为JDK 11或者JDK 8这两个长期支持版本,旧版Lombok对这两个版本的兼容性最好,不需要修改项目任何配置就能直接编译运行。
内容的提问来源于stack exchange,提问作者Paulo Sérgio Rodrigues Alves
相关产品推荐
相关产品推荐

