> 技术文档 > 解决 IntelliJ IDEA 启动 Java 项目时报错 java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCI_kotlin: [internal error] java.lang.nosuchfielderro

解决 IntelliJ IDEA 启动 Java 项目时报错 java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCI_kotlin: [internal error] java.lang.nosuchfielderro

超详细的解决 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\' 的指南。

解决 IntelliJ IDEA 启动 Java 项目时报错 java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCI_kotlin: [internal error] java.lang.nosuchfielderro

文章目录

  • 作者简介
    • 猫头虎是谁?
    • 作者名片 ✍️
    • 加入我们AI共创团队 🌐
    • 加入猫头虎的共创圈,一起探索编程世界的无限可能! 🚀
  • 正文
    • 🧩 一、错误背景与含义解析
      • ✅ 错误含义:
    • 🔍 二、常见原因排查
      • 1. **JDK 版本冲突(最常见)**
        • 示例:
      • 2. **IDE 使用的 JDK 与项目编译 JDK 不一致**
      • 3. **Lombok 插件版本与 JDK 不兼容**
    • 🧰 三、解决步骤详解
      • ✅ 步骤一:确认 JDK 版本一致性
      • ✅ 步骤二:升级或降级 Lombok 版本
      • ✅ 步骤三:IDEA 插件同步与清理缓存
      • ✅ 步骤四:检查是否误用 `tools.jar`(仅限 Java 8)
      • ✅ 步骤五:确认编译工具链设置正确
      • ✅ 步骤六:降级 JDK 作为临时解决方案
    • 🧪 四、验证解决是否成功
    • 💡 五、额外建议
    • 🧾 六、总结
  • 粉丝福利
      • 联系我与版权声明 📩

作者简介

猫头虎是谁?

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

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

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

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


作者名片 ✍️

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

加入我们AI共创团队 🌐

  • 猫头虎AI共创社群矩阵列表
    • 点我进入共创社群矩阵入口
    • 点我进入新矩阵备用链接入口

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

部分专栏链接

🔗 精选专栏

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

解决 IntelliJ IDEA 启动 Java 项目时报错 java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCI_kotlin: [internal error] java.lang.nosuchfielderro

正文


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

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

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 版本是否一致?
  4. 终端输入:

    java -versionjavac -version

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


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

如果你项目用到了 Lombok:

  1. 查看你的 Lombok 依赖版本:

    dependencies { compileOnly \'org.projectlombok:lombok:xxx\' annotationProcessor \'org.projectlombok:lombok:xxx\'}
  2. 将版本升级到支持你当前 JDK 的版本(推荐使用 官网兼容列表)。

例如:

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

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

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

  2. 清理缓存并重启 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. 清理并重新构建项目:

    ./gradlew clean build

    mvn clean install
  2. IDEA 中点击 Build > Rebuild Project

  3. 若无报错,点击运行按钮启动项目。


💡 五、额外建议

  • 尽量不要依赖 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 版本信息,我可以为你进一步分析定制化方案。需要我帮你诊断依赖冲突或配置示例吗?

猫头虎

粉丝福利


👉 更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击文末名片获取更多信息。我是猫头虎博主,期待与您的交流! 🦉💬
解决 IntelliJ IDEA 启动 Java 项目时报错 java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCI_kotlin: [internal error] java.lang.nosuchfielderro


联系我与版权声明 📩

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

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

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

在这里插入图片描述