java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree

概要

	最近在一个微服务项目中新增了一个模块,
	但是build一直卡住没有进展,点开发现报错了:
	java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$
	JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'

在这里插入图片描述

造成原因

造成这个原因是主要是使用的Spring的依赖版本与jdk版本不兼容造成的。
最常见的办法就是更新jdk版本,毕竟调节jdk版本还是很快的。
选中项目右键,点击打开模块设置
我本人是将jdk21换成了jdk11就成功了。在这里插入图片描述
进去之后调节jdk版本
在这里插入图片描述

  • 特别要注意的一点就是模块这个地方有可能也需要修改,我之前就是没有注意这个地方,导致还是用的是jdk21所以一直不成功,把这个地方改了就可以了*

在这里插入图片描述

修改之后构建完成
在这里插入图片描述

### Java 编译时出现 `java.lang.NoSuchFieldError` 错误的解决方案 当项目从 JDK 17 升级至 JDK 21 后,可能会遇到如下错误: ``` java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid' ``` 此问题的根本原因是,在 JDK 21 中,`qualid` 字段的类型发生了变更,从 `JCTree` 更改为 `JCFieldAccess`[^4]。这种类型的更改使得 Lombok 或其他工具无法正确访问该字段,进而引发 `NoSuchFieldError`。 以下是解决问题的具体方法: #### 方法一:升级 Spring Boot 版本 如果当前使用的 Spring Boot 是较低版本(如 3.1.2),建议将其升级到 **3.1.4** 或更高版本。Spring Boot 的新版本修复了与此问题相关的兼容性缺陷[^5]。 可以通过修改项目的 `pom.xml` 文件来完成升级操作: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.4</version> <!-- 至少为 3.1.4 --> </parent> ``` #### 方法二:更新 Lombok 版本 Lombok 工具可能未适配 JDK 21 的内部 API 变更。因此,需确保使用最新版 Lombok 来解决此类问题。可以在 `pom.xml` 中指定最新的 Lombok 版本号: ```xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <!-- 使用最新稳定版本 --> <scope>provided</scope> </dependency> ``` #### 方法三:禁用特定功能以绕过问题 作为临时措施,可以尝试通过配置文件禁用某些可能导致冲突的功能。例如,关闭 Lombok 的代理生成器或其他高级特性。在 `lombok.config` 文件中添加以下内容: ```properties lombok.addJacksonAnnotations=false lombok.anyConstructor.suppressConstructorProperties=true ``` #### 方法四:回退 JDK 版本 如果上述方法均不可行,可考虑暂时将 JDK 回滚至较旧版本(如 JDK 17)。虽然这不是长久之计,但在紧急情况下可以帮助恢复服务运行。 --- ### 总结 为了彻底解决 `java.lang.NoSuchFieldError` 错误,推荐优先执行以下两项操作: 1. 将 Spring Boot 升级至 **3.1.4** 或以上版本; 2. 更新 Lombok 到其最新稳定版本。 这些调整能够有效应对因 JDK 内部结构变更而导致的不兼容问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值