Maven 编译报错:java.lang.NoSuchFieldError: JCImport 问题总结

文章目录

Maven 编译报错:java.lang.NoSuchFieldError: JCImport 问题总结

一、报错信息

ERROR\] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project mall-common: Fatal error compiling: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid' -\> \[Help 1

二、根本原因

  1. 项目本身配置为 JDK 1.8 环境
  2. Lombok 版本较低,不支持 JDK 17+
  3. IDEA 中 Maven Runner 使用了高版本 JDK(17/21)进行编译
  4. 高版本 JDK 编译 JDK8 + 低版本 Lombok 项目,导致内部语法结构不兼容

三、关键知识点:两个 JDK 配置区别

  1. Maven → Importing → JDK for importer

    • 作用:IDEA 解析项目、代码提示、语法检查
    • 仅影响 IDE 界面,不影响实际编译
  2. Maven → Runner → JRE

    • 作用:真正执行 mvn compile/package 命令
    • 决定实际编译环境,是本次报错的核心原因

四、最终解决方案

  1. File → Settings → Build, Execution, Deployment → Build Tools → Maven → Importing

    • JDK for importer:选择 JDK 1.8
  2. File → Settings → Build, Execution, Deployment → Build Tools → Maven → Runner

    • JRE:选择 Use Project JDK 或者 JDK 1.8
  3. 刷新 Maven,执行编译命令

    mvn clean compile

五、总结

项目配置 JDK8 但 Maven Runner 使用高版本 JDK,会导致 Lombok 不兼容,出现 JCImport 错误。

统一两处 JDK 版本为 1.8 即可 100% 解决。

相关推荐
摇滚侠几秒前
Java 基础面试题 真正的 offer 偏方 Java 基础 Java 高级
java·开发语言
蚰蜒螟4 分钟前
深入剖析 OpenJDK 17 解释器中的安全点(Safepoint)进入与退出机制
java·开发语言·安全
山岚的运维笔记7 分钟前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash
代钦塔拉8 分钟前
第一篇:字符编码全解:从ASCII/GBK/Unicode到UTF-8
开发语言·qt
Generalzy8 分钟前
为什么 Go 的注释,能控制编译器?
java·python·golang
syagain_zsx10 分钟前
Qt初识,快速上手
开发语言·qt
Wy_编程11 分钟前
go语言面向对象和异常处理
开发语言·后端·golang
进击的荆棘12 分钟前
C++起始之路——C++11(下)
开发语言·c++·c++11·lambda
Galsk13 分钟前
Linux零拷贝
java·linux·服务器·面试
许长安15 分钟前
C++ 原子变量与内存序:从std::atomic到release/acquire
开发语言·数据结构·c++·经验分享·笔记