武威市网站建设_网站建设公司_数据统计_seo优化
2026/1/7 18:33:55 网站建设 项目流程

一、错误现象

有些同学本地只有21版本的JDK,然后使用JDK21来做movie这个项目时,启动报错,如图

具体的错误信息:

java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

二、分析错误原因

这个错,通常是LombokJDK 21(或更高版本JDK)不兼容所导致的问题

具体是因为:题干附件里给的 movie这个项目,使用的springBoot版本是 3.0.5

而每个版本的springBoot,内部都会去管理维护 一些常用依赖jar包的版本号,如下图,就是3.0.5版本的springBoot内部维护的各个依赖的版本号。如下图,3.0.5这个版本的springBoot,内部维护的lombok的版本号默认是1.18.26,所以你的pom里引用lombok时,如果不写version版本号,那它默认用的就是springBoot中维护的这个版本

具体分析原因如下:

  • com.sun.tools.javac.tree.JCTree$JCImport 是 JDK 编译器内部的类,属于 内部 API
  • Lombok 在编译期通过反射或直接操作 AST(抽象语法树)来生成代码(如 getter/setter 等),因此会依赖这些内部API
  • JDK 17+(尤其是 JDK 21)对内部 API 做了大量重构或移除,字段名、类结构可能都发生了变化。例如:在旧版 JDK 中,JCImport 类有一个字段叫 qualid,但在 JDK 21 中该字段可能已被重命名为 qualifiedIdentifier 或其他名称。
  • 如果你使用的 Lombok 版本较旧(如 < 1.18.30),它还不支持 JDK 21 的内部结构变化,就会抛出 NoSuchFieldError。

三、解决方案

第一种方案:

不使用springBoot维护的默认Lombok版本,在项目的pom.xml中显式的把Lombok的版本号写出来,并且使用兼容 JDK 21 版本的Lombok:Lombok 1.18.30 及以上版本 开始正式支持 JDK 21。

推荐使用最新稳定版(截至 2026 年 1 月,最新版为 1.18.34)

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.34</version> <scope>provided</scope> </dependency>

最后刷新maven,再重新启动项目就可以了

第二种方案:

或者本地安装的有jdk17的话,可以切换jdk的版本到17也可以

idea中切换jdk版本,可以看这一篇:IDEA中切换jdk版本时,需要修改确认的地方,最全的记录

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询