java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'
NoSuchFieldError通常表示在运行时某个类没有找到特定的字段。这里提到的类JCTree$JCImport缺少qualid字段。可能的情况是使用的库或工具版本不兼容,比如JDK版本问题。因为com.sun.tools.javac是JDK内部的包,不同版本的JDK可能有不同的内部实现。
原因分析
依赖库版本问题
例如:Lombok、MapStruct、APT(注解处理器)等工具直接调用了 JDK 内部的 com.sun.tools.javac 包中的类(如 JCTree)。
当你的 JDK 版本升级后(如从 JDK 8 到 JDK 11+),这些内部类的字段可能已被重命名或删除,但依赖库未适配新版本。
直接使用 JDK 内部 API
如果你的代码直接引用了 com.sun.tools.javac 中的类(如手动操作 AST),这类 API 本身不稳定,不同 JDK 版本会导致兼容性问题。
pom.xml 中引用了 Lombok,但没有指定版本号,默认继承 Spring Boot 父项目的 Lombok 版本。Spring Boot 3.0.5 默认可能使用较旧的 Lombok 版本(例如 1.18.26),而旧版本 Lombok 在 JDK 17+ 中可能因访问了 JDK 内部 API(如 JCTree$JCImport)导致 NoSuchFieldError。
点击查看代码
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version> <!-- 显式指定版本 -->
<optional>true</optional>
</dependency>
浙公网安备 33010602011771号