Lombok编译失败主因是JDK升级后注解处理器未触发或被模块系统拦截,需先通过mvn compile -X | grep -i lombok验证处理器是否加载,再升级Lombok至1.18.30+并正确配置IDEA注解处理。

OpenJDK 升级后 Lombok 编译失败,大概率不是 Lombok 本身坏了,而是 javac 注解处理器没被触发,或者被模块系统拦在了门外。必须立刻验证是编译期失效(mvn compile 报 cannot find symbol),还是仅 IDE 显示异常(IDEA 里红、但 mvn clean compile 成功)——这两类问题的根因和解法完全不同。
确认是不是注解处理器根本没运行
这是 JDK 21+(尤其是 JDK 23)升级后最典型的“静默失效”:代码里写了 @Data,mvn clean compile 却报一堆 cannot find symbol: method getXXX(),连 lombok 包都提示找不到。
- 先排除 Maven 依赖声明错误:确保
lombok是,且没被其他依赖意外provided excluded或覆盖 - 检查
maven-compiler-plugin是否显式禁用了注解处理器:里不能含-proc:none;若用了,必须把lombok显式加进去(JDK 23 默认不自动发现provided依赖里的处理器) - 最关键的验证动作:在终端执行
mvn clean compile -X | grep -i lombok,看日志里有没有lombok.javac.apt.LombokProcessor被加载的痕迹。没有?说明处理器压根没注册上
修复 JDK 模块系统对 Lombok 的拦截
JDK 17 起,jdk.compiler 模块默认不导出 com.sun.tools.javac.processing 给 unnamed module(即 classpath 加载的 Lombok),旧版 Lombok(≤1.18.22)会直接抛 IllegalAccessError。
- 升级 Lombok 到
1.18.30+是唯一推荐方案:它已完全移除对JavacProcessingEnvironment等内部类的直接调用,改用标准 JSR 269 API - 不要试图加
--add-opens参数绕过(如--add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED):这属于临时补丁,JDK 23 已进一步收紧,部分参数可能被忽略或失效 - 如果你用的是 Gradle,确认
annotationProcessor声明方式正确:compileOnly 'org.projectlombok:lombok:1.18.32'+annotationProcessor 'org.projectlombok:lombok:1.18.32',不能只靠compileOnly
同步修复 IDEA 的注解处理开关与插件版本
即使命令行编译通过,IDEA 里仍可能标红——因为 IDEA 自己的编译器(而非 Maven)没启用 Lombok 处理器。
- 打开
Settings → Build → Compiler → Annotation Processors,勾选Enable annotation processing;下方Processor path必须设为Obtain processors from project classpath(不是Default) - 检查 IDEA 内置 Lombok 插件是否启用:
Settings → Plugins搜索Lombok,确保已安装且状态为Enabled;插件版本需 ≥ 243.22567(对应 IDEA 2024.3+),老版本不兼容 JDK 23 的注解处理器发现机制 - 重启 IDEA 后,强制刷新项目:
File → Reload project,再执行Build → Rebuild Project;别信 “自动导入”,它经常漏掉 processor 配置
真正容易被忽略的是:Lombok 的生效依赖于“javac 编译器 + 注解处理器 SPI + IDE 构建桥接”三者严格对齐。JDK 升级后,任何一环的默认行为变了(比如 JDK 23 不再自动扫描 provided 依赖里的 META-INF/services/javax.annotation.processing.Processor),都会导致看似配置完好却静默失效。别急着降级 JDK,先用 mvn compile -X 和 grep lombok 锁定处理器是否启动,比盲目升级/降级更省时间。











