解决 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

【MCP探索实践】Google GenAI Toolbox:Google开源的企业级AI数据库中间件、5分钟搞定LLM-SQL安全互联

【MCP探索实践】Google GenAI Toolbox:Google开源的企业级AI数据库中间件、5分钟搞定LLM-SQL安全互联

系列篇章💥 No.文章1【MCP探索实践】Cherry Studio+MCP实战:3步让AI自动抓网页/读文件/调API2【MCP探索实践】FastAPI + MCP:2025年最火的后端与AI集成方案3【MCP探索实践】GitHub MCP Server:为开发者打造的高效自动化工具4【MCP探索实践】MoLing:零依赖跨平台办公自动化神器,3分钟搞定文件+浏览器双核操作5【MCP探索实践】3分钟搭建AI服务器!FastMCP让开发效率飙升10倍6【MCP探索实践】MindsDB:借助 MCP 协议,让 AI 大模型秒变 SQL 专家7【MCP探索实践】Web Search MCP Server:无需 API 密钥的免费网络搜索服务8【MCP探索实践】百度地图 MCP Server:告别繁琐集成、

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk

X-WRT 终极使用指南:打造完全可定制的开源路由器系统

X-WRT 是一个基于 OpenWrt 的深度定制开源项目,专为嵌入式设备提供高度灵活的 Linux 操作系统解决方案。通过完全可写的文件系统和强大的包管理功能,X-WRT 让您彻底摆脱厂商固件的限制,实现对网络设备的完全自主控制。 【免费下载链接】x-wrt 项目地址: https://gitcode.com/gh_mirrors/xw/x-wrt 为什么选择 X-WRT? * 完全自由定制:摆脱厂商固件的束缚,根据实际需求选择和配置应用程序 * 企业级稳定性:基于成熟的 OpenWrt 框架,提供稳定可靠的网络服务 * 开发者友好:提供完整的开发框架,无需构建完整固件即可开发应用 * 丰富的软件生态:拥有庞大的软件包仓库,满足各种应用场景需求 快速上手体验 初次使用 X-WRT 会感受到前所未有的自由度和控制力。传统的路由器固件往往功能单一、配置受限,而 X-WRT 则像为您打开了一扇通往无限可能的大门。从简单的家庭 WiFi 管理到复杂的企业网络部署,X-WRT

By Ne0inhk

Cursor+Git高效管理代码(github中已有仓库,仓库中有项目)

一、初始化Cursor中的git 1、打开Cursor的终端输入如下代码: git remote -v 如果输出空或者没有输出,则没有连接远程仓库。 2、添加远程仓相关步骤 建立连接 git remote add origin https://github.com/你的用户名/你的仓库名.git 创建分支 git branch -M main 拉取文件---合并冲突文件。 git pull origin main --allow-unrelated-histories 上述步骤运行后,回到项目界面,需要在项目文件里手动合并冲突。 点击合并编辑器中解析,然后选择你要保存传入还是当前的代码。 合并好点击右上角对号或者Ctrl+S保存文件。 回到菜单这里 1、选择你的更改文件,点击加号暂存。 2、在消息中输入消息(任意修改或者”second commit“)。 3、

By Ne0inhk