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)生成代码
因此它依赖三个东西:
- Maven / Gradle 依赖
- IDEA 的 Lombok 插件
- 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
欢迎留言讨论 👋