如何解决Java19+Lombok1.18.20下JCTree$JCImport的NoSuchFieldError错误?
解决Java 19 + Lombok 1.18.20 引发的NoSuchFieldError问题
这个报错确实是Java版本和Lombok版本不兼容导致的——JDK 19对com.sun.tools.javac.tree.JCTree$JCImport的内部字段做了调整,而Lombok 1.18.20还在用旧的字段名,所以找不到对应字段。不用升级到JDK21的话,有两种靠谱的修复方式:
方法一:升级Lombok到兼容Java 19的版本
Lombok从1.18.22版本开始正式支持Java 19,直接把Lombok版本升到1.18.22及以上(比如1.18.30这种稳定版)就能彻底解决问题。
Maven配置示例
修改pom.xml里的Lombok依赖版本:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency>
同时记得更新maven-compiler-plugin的版本,确保它能适配Java 19:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>19</source> <target>19</target> </configuration> </plugin>
Gradle配置示例
修改build.gradle(或build.gradle.kts)里的Lombok版本:
dependencies { compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' }
方法二:添加编译时JVM参数(临时方案)
如果暂时不想升级Lombok,可以通过添加JVM参数让Lombok能访问JDK 19的内部API,绕开字段名不匹配的问题。
Maven配置
在maven-compiler-plugin里添加compilerArgs:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>19</source> <target>19</target> <compilerArgs> <arg>--add-opens</arg> <arg>jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg> <arg>--add-opens</arg> <arg>jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg> <arg>--add-opens</arg> <arg>jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin>
Gradle配置
在build.gradle的compileJava任务里添加参数:
tasks.withType(JavaCompile) { options.compilerArgs += [ '--add-opens', 'jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', '--add-opens', 'jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', '--add-opens', 'jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED' ] }
注意:这个方法只是临时 workaround,长期来看还是升级Lombok版本更稳妥,因为后续JDK版本的内部API可能还会变化,旧版本Lombok可能会出现新的兼容性问题。
内容的提问来源于stack exchange,提问作者Bktedr
相关产品推荐
相关产品推荐

