解决 IntelliJ IDEA 启动 Java 项目时报错 java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCI

解决 IntelliJ IDEA 启动 Java 项目时报错 java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCI

超详细的解决 IntelliJ IDEA 启动 Java 项目时报错java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid' 的指南。

在这里插入图片描述

文章目录


作者简介

猫头虎是谁?

大家好,我是猫头虎,猫头虎技术团队创始人,也被大家称为猫哥。我目前是COC北京城市开发者社区主理人、COC西安城市开发者社区主理人,以及云原生开发者社区主理人,在多个技术领域如云原生、前端、后端、运维和AI都具备丰富经验。

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用方法、前沿科技资讯、产品评测、产品使用体验,以及产品优缺点分析、横向对比、技术沙龙参会体验等。我的分享聚焦于云服务产品评测、AI产品对比、开发板性能测试和技术报告。

目前,我活跃在ZEEKLOG、51CTO、腾讯云、阿里云开发者社区、知乎、微信公众号、视频号、抖音、B站、小红书等平台,全网粉丝已超过30万。我所有平台的IP名称统一为猫头虎或猫头虎技术团队。

我希望通过我的分享,帮助大家更好地掌握和使用各种技术产品,提升开发效率与体验。


作者名片 ✍️博主:猫头虎全网搜索关键词:猫头虎作者微信号:Libin9iOak作者公众号:猫头虎技术团队更新日期:2025年03月21日🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!

加入我们AI共创团队 🌐

加入猫头虎的共创圈,一起探索编程世界的无限可能! 🚀

部分专栏链接

🔗 精选专栏《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!《100天精通Golang(基础入门篇)》 — 踏入Go语言世界的第一步!

猫头虎分享No bug

正文


🧩 一、错误背景与含义解析

这个错误的完整形式通常为:

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)。它不是语法错误,而是编译时或者构建工具使用了与运行时不兼容的类文件


🔍 二、常见原因排查

1. JDK 版本冲突(最常见)

你项目依赖的某些插件(如 Lombok 或 Annotation Processor)使用了 tools.jar 或 Javac 内部 API,而你当前的 JDK 版本与预期不一致。

示例:

Lombok 0.10 用的是 Java 8 的 API,而你用了 Java 17,结构已发生变化。


2. IDE 使用的 JDK 与项目编译 JDK 不一致

IDEA 中配置的 Project SDK 和 Java Compiler 使用的是不同的 JDK。


3. Lombok 插件版本与 JDK 不兼容

Lombok 使用了内部编译器树结构,JDK 的升级可能破坏其兼容性。


🧰 三、解决步骤详解


✅ 步骤一:确认 JDK 版本一致性

  1. 打开 IDEA,点击 File > Project Structure > Project
    • Project SDK:选择你的目标 JDK(推荐使用与构建脚本一致版本)
    • Project language level:对应 JDK 语言级别
  2. 点击 Project > Modules > Sources 确认每个 module 使用的是正确的 SDK。
  3. 点击 Build, Execution, Deployment > Compiler > Java Compiler
    • 各模块的编译器 JDK 版本是否一致?

终端输入:

java -version javac -version 

确保终端运行的版本和 IDEA 一致。


✅ 步骤二:升级或降级 Lombok 版本

如果你项目用到了 Lombok:

  1. 将版本升级到支持你当前 JDK 的版本(推荐使用 官网兼容列表)。

查看你的 Lombok 依赖版本:

dependencies { compileOnly 'org.projectlombok:lombok:xxx' annotationProcessor 'org.projectlombok:lombok:xxx'}

例如:

  • Java 17 建议使用 Lombok 1.18.22+
  • Java 21 建议使用 Lombok 1.18.30+

✅ 步骤三:IDEA 插件同步与清理缓存

  1. 确保安装了最新版本的 Lombok 插件(IDEA Plugins)。

清理缓存并重启 IDEA:

File > Invalidate Caches / Restart > Invalidate and Restart 

✅ 步骤四:检查是否误用 tools.jar(仅限 Java 8)

在 Java 9+ 中 tools.jar 被移除,如果你的项目仍试图使用它,容易出错。解决方案:

  • 移除任何有关 tools.jar 的显式依赖。
  • 替代方案是通过 Java Compiler API 或 JSR-199 使用标准工具。

✅ 步骤五:确认编译工具链设置正确

Settings > Build Tools > GradleMaven 中确认是否:

  • 使用 IntelliJ 的构建器(Build using IntelliJ)或原生构建器(使用 Gradle Wrapper)。
  • Gradle/Maven 的 JDK 是否配置成了项目使用的 JDK(非 IDEA 自带 JDK)。

✅ 步骤六:降级 JDK 作为临时解决方案

如果必须使用旧版本插件或工具,而它们不兼容最新 JDK,可以临时降级到 Java 8 或 Java 11。

⚠️ 不推荐长期使用旧版本 JDK,建议升级依赖!

🧪 四、验证解决是否成功

执行以下操作验证问题是否已解决:

  1. IDEA 中点击 Build > Rebuild Project
  2. 若无报错,点击运行按钮启动项目。

清理并重新构建项目:

./gradlew clean build 

mvn clean install

💡 五、额外建议

  • 尽量不要依赖 com.sun.tools.javac.tree.* 类,因为它们是 JDK 内部 API,未来随时可能更改。
  • 若需使用编译器 API,考虑使用 javax.tools.JavaCompilercom.sun.source.* 提供的标准接口。
  • 对于有 Annotation Processing 需求的项目,推荐用 AutoService + javax.annotation.processing.* 替代 Lombok 的 hack。

🧾 六、总结

步骤操作
1检查并统一 JDK 版本(IDEA、Gradle/Maven、终端)
2升级 Lombok 到兼容版本
3清理 IDEA 缓存、重启
4检查 tools.jar 使用情况(特别是 Java 9+)
5保持构建工具链一致
6若依赖不兼容,临时降级 JDK

如需进一步协助,可以提供你的 build.gradlepom.xml、完整 JDK 版本号及 Lombok 版本信息,我可以为你进一步分析定制化方案。需要我帮你诊断依赖冲突或配置示例吗?

猫头虎

粉丝福利


👉更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击文末名片获取更多信息。我是猫头虎博主,期待与您的交流! 🦉💬

猫头虎

联系我与版权声明 📩

  • 联系方式
    • 微信:Libin9iOak
    • 公众号:猫头虎技术团队
  • 版权声明
    本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问猫头虎的博客首页

点击✨⬇️下方名片⬇️✨,加入猫头虎AI共创社群矩阵。一起探索科技的未来,共同成长。🚀

🔗 猫头虎抱团AI共创社群 | 🔗 Go语言VIP专栏 | 🔗 GitHub 代码仓库 | 🔗 Go生态洞察专栏✨ 猫头虎精品博文

在这里插入图片描述

Read more

在 CentOS 系统上实现定时执行 Python 邮件发送任务

在 CentOS 系统上实现定时执行 Python 邮件发送任务

文章目录 * **引言** * **方案一:经典基石 - Cron 作业** * **1. 原理概述** * **2. 详细实现步骤** * **3. 优缺点分析** * **4. 适用场景** * **方案二:灵活调度 - Systemd 定时器** * **1. 原理概述** * **2. 详细实现步骤** * **3. 优缺点分析** * **4. 适用场景** * **方案三:Python 内生方案 - APScheduler 库** * **1. 原理概述** * **2. 详细实现步骤** * **3. 优缺点分析** * **4. 适用场景** * **方案四:企业级任务队列 - Celery with Redis** * **1. 原理概述*

By Ne0inhk
当Python遇见高德:基于PyQt与JS API构建桌面三维地形图应用实战

当Python遇见高德:基于PyQt与JS API构建桌面三维地形图应用实战

摘要: 地图技术作为数字化世界的基石,其应用早已超越了传统的导航和位置服务。对于开发者而言,如何将强大的地图能力集成到不同形态的应用中,是一个充满挑战与机遇的课题。本文将详细阐述一个独特的实践案例:如何利用Python的PyQt5框架,结合高德开放平台强大的JavaScript API 2.1Beta,从零开始构建一个功能丰富的桌面端地图浏览器。项目不仅实现了二维、三维、卫星、地形等多种地图样式的动态切换,还集成了地点搜索(POI)、实时标记等核心功能。本文将深入探讨技术选型、架构设计、核心功能实现、Python与JavaScript双向通信机制,并在此基础上拓展实现“点击获取坐标与地址(逆地理编码)”及“路线规划”等高级功能,旨在为开发者提供一个将Web地图技术无缝融入桌面应用的完整解决方案,展现高德开放平台在跨技术栈融合应用中的卓越潜力。 一、 引言:为何选择在桌面端构建地图应用? 在移动互联网和Web应用大行其道的今天,探讨桌面地图应用的开发似乎有些“复古”。然而,在特定业务场景下,桌面应用依然拥有不可替代的优势。例如,在专业地理信息系统(GIS)、行业数据监控中心、复杂的

By Ne0inhk
Python IDLE 使用教程 一文让你掌握Python3.8 自带的集成开发环境的使用

Python IDLE 使用教程 一文让你掌握Python3.8 自带的集成开发环境的使用

说明:本教程聚焦IDLE(Python自带的集成开发环境)的常用功能,帮助你快速上手。 本文中使用的截图软件为Snipaste(免费好用) 详细使用步骤可以移步我的另一篇博客 Snipaste安装使用教程 📑 目录 * 一、启动IDLE * 二、Shell交互模式 * 三、编辑器使用 * 四、调试功能 * 五、实用技巧 * 六、常见问题 一、启动IDLE 1.1 三种启动方式 方式一:开始菜单(Windows) 1. 点击"开始"菜单 2. 找到 Python 3.x 文件夹 3. 点击 IDLE (Python 3.x) ######方式二:搜索启动

By Ne0inhk

双重机器学习之因果推断 | CATE条件平均处理效应估计:五大方法原理详解与模拟数据实战(python版)

家人们我又更新了,代码和科研绘图在论文末尾,欢迎大家评论点赞和收藏,你们的认可是我坚持的动力,祝大家科研顺利。 因果推断 | CATE条件平均处理效应估计:五大方法原理详解与模拟数据实战 本文是因果推断系列文章。本篇聚焦 CATE(Conditional Average Treatment Effect,条件平均处理效应) 的估计,从ATE的局限性讲起,深入介绍S-Learner、T-Learner、X-Learner、因果森林DML和线性DML五种主流方法的原理,并在模拟数据上进行完整的代码实操与效果对比。 1 从ATE到CATE:为什么需要异质性处理效应? 1.1 ATE只能回答"平均有没有用" ATE(Average Treatment Effect)回答的是:干预措施对整个群体的平均效果是什么? 但在实际业务中,我们更想知道的是:对于不同的个体或子群,干预效果有什么不同? 举几个例子: * 精准营销:给所有人发满减券ATE为正,但拆开看,高消费用户根本不需要券,低消费用户反而是增量用户——CATE帮你找到真正的增量人群。 * 个性化医疗:

By Ne0inhk