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

欢迎留言讨论 👋

复制代码
相关推荐
计算机学姐3 小时前
基于SpringBoot的汉服租赁系统【颜色尺码套装+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
qq_5470261793 小时前
Maven 仓库管理
java·maven
天天摸鱼的java工程师3 小时前
线程池深度解析:核心参数 + 拒绝策略 + 动态调整实战
java·后端
mjhcsp3 小时前
C++ KMP 算法:原理、实现与应用全解析
java·c++·算法·kmp
好大哥呀4 小时前
C++ IDE
开发语言·c++·ide
邵伯4 小时前
Java源码中的排序算法(一)--Arrays.sort()
java·排序算法
阿里巴巴P8高级架构师4 小时前
从0到1:用 Spring Boot 4 + Java 21 打造一个智能AI面试官平台
java·后端
stevenzqzq4 小时前
trace和Get thread dump的区别
java·android studio·断点
桦说编程4 小时前
并发编程踩坑实录:这些原则,帮你少走80%的弯路
java·后端·性能优化