升级到Java 17后Maven编译报错,与Lombok相关如何解决?
错误诱因
Java 9引入的模块系统对JDK内部非公开API做了访问限制,你当前使用的1.18.12版本Lombok发布时间较早,未适配Java 17的模块访问规则,运行时需要调用jdk.compiler模块下的内部类com.sun.tools.javac.processing.JavacProcessingEnvironment,Java 11对该类访问的限制较宽松,升级到Java 17后权限收紧,直接触发IllegalAccessError。
解决方案
优先选择方案一,无需额外配置即可彻底解决问题:
方案一:升级Lombok到适配Java 17的版本
将pom.xml中lombok.version属性值修改为1.18.22及以上的稳定版本即可,推荐使用最新稳定版1.18.30,该系列版本已经原生兼容Java 17的模块权限规则。方案二:手动开放JDK内部类访问权限(仅适用于暂时无法升级Lombok版本的场景)
修改maven-compiler-plugin的配置,新增编译参数手动开放对应内部类的访问权限,修改后的配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.version}</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> <compilerArgs> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg> <arg>--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

