Lombok @Data 在 IDEA 中运行报错解决方案

Lombok @Data 在 IDEA 中运行报错?一篇文章彻底解决

在使用 Spring Boot / Java 项目 时,lombok.Data 几乎是标配。但很多人都会遇到一个"看起来像灵异事件"的问题:

IDEA 里代码能写,运行却报错;或者 IDEA 直接红线报错

本文将从 现象 → 原因 → 排查 → 彻底解决 → 最佳实践 五个维度,带你一次性解决 @Data 在 IDEA 中运行报错的问题。


一、常见报错现象

1️⃣ 编译期错误(最常见)

text 复制代码
cannot find symbol
  symbol:   method getOrderId()

或:

text 复制代码
NoSuchMethodError: com.xxx.OrderEvent.getOrderId()

表现:

  • IDEA 编辑器里一切正常
  • 一运行 / 一打包就失败

2️⃣ IDEA 编辑器红线

java 复制代码
@Data
public class OrderEvent {
    private String orderId;
}

使用时:

java 复制代码
orderEvent.getOrderId(); // IDEA 提示找不到方法

3️⃣ 运行时异常(Spring / Jackson / Pulsar)

text 复制代码
InvalidDefinitionException:
No serializer found for class OrderEvent

二、问题的根本原因(重点)

❗ Lombok 不是 Java 语法

Lombok 是:

在编译期通过注解处理器(Annotation Processor)生成代码

因此它依赖三个东西:

  1. Maven / Gradle 依赖
  2. IDEA 的 Lombok 插件
  3. IDEA 的 Annotation Processing 开关

少任何一个都会出问题。


三、一步一步排查(照着做)


✅ Step 1:确认 Maven 依赖

xml 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.32</version>
    <scope>provided</scope>
</dependency>
注意事项
  • 不要省略 version
  • scope=provided 是推荐写法
  • Java 17+ 请使用 1.18.28 以上

✅ Step 2:安装 IDEA 的 Lombok 插件(最容易忽略)

路径:

复制代码
File → Settings → Plugins → 搜索 Lombok

状态必须是:

  • Installed
  • Enabled

⚠️ 安装后一定要 重启 IDEA


✅ Step 3:开启 Annotation Processing(90% 的坑)

路径:

复制代码
File
 → Settings
   → Build, Execution, Deployment
     → Compiler
       → Annotation Processors

勾选:

  • ☑ Enable annotation processing
  • ☑ Obtain processors from project classpath

点击:

Apply → OK → 重启 IDEA


✅ Step 4:重新构建项目

bash 复制代码
mvn clean compile

或:

复制代码
Build → Rebuild Project

四、为什么 IDEA 能写代码却运行报错?

这是很多人最困惑的一点。

原因:

  • IDEA 只是在"猜" Lombok 生成的方法

  • 真正的代码生成发生在 编译阶段

  • 如果 Annotation Processing 没开:

    • 编译器根本不知道 getter/setter 存在

👉 编辑器 ≠ 编译器


五、Java 17 / Spring Boot 3 的额外注意事项

Java 版本 Lombok 最低版本
8 1.18.20
11 1.18.24
17 1.18.28
21 1.18.30
  • 老版本 Lombok 会直接编译失败
  • 建议始终使用最新版

六、Spring Boot / Pulsar 场景下的隐藏坑

在消息中间件(Kafka / Pulsar)中,经常会有:

java 复制代码
@Data
public class OrderEvent {
    private String orderId;
}

如果 Lombok 失效,会导致:

  • Jackson 无法反序列化
  • Consumer 启动失败
  • 报错看起来像是"消息中间件问题"

实际上根因是 Lombok。


七、最佳实践建议(生产级)

✅ 方案一:继续用 Lombok(推荐)

  • 配好 IDEA
  • 统一 Lombok 版本
  • 写清楚 README

✅ 方案二:使用 Java Record(Java 17+)

java 复制代码
public record OrderEvent(String orderId, String status) {}

优点:

  • 无 Lombok 依赖
  • 天然不可变
  • 非常适合消息对象

八、快速自检清单

  • pom.xml 有 lombok 依赖
  • IDEA 安装 Lombok 插件
  • Annotation Processing 已开启
  • IDEA 已重启
  • Lombok 版本 ≥ Java 要求

九、总结

Lombok 的问题,99% 都不是 Lombok 本身的问题,而是 IDEA 没配好。

只要记住一句话:

IDEA + Annotation Processing + 正确版本 Lombok

你就再也不会被 @Data 折磨。


十、延伸阅读(可选)

  • Lombok vs Java Record 如何选?
  • Lombok 在 CI / Docker 中为什么没问题?
  • Lombok 和 MapStruct / Pulsar 一起用的坑

如果你愿意,我可以帮你:

  • 🔍 定位你当前项目的具体 Lombok 错误
  • 🧪 给你一个最小可复现 Demo
  • 🔁 帮你决定要不要迁移到 record

欢迎留言讨论 👋

复制代码
相关推荐
铁蛋AI编程实战10 分钟前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘21 分钟前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays101123 分钟前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
摇滚侠34 分钟前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea
云姜.39 分钟前
java多态
java·开发语言·c++
李堇42 分钟前
android滚动列表VerticalRollingTextView
android·java
泉-java1 小时前
第56条:为所有导出的API元素编写文档注释 《Effective Java》
java·开发语言
zfoo-framework1 小时前
帧同步和状态同步
java
charlotte102410242 小时前
高并发:关于在等待学校教务系统选课时的碎碎念
java·运维·网络
亓才孓2 小时前
[JDBC]PreparedStatement替代Statement
java·数据库