Spring Boot 中 Lombok 注解失效的解决方案

文章目录

背景

所用 Spring Boot 版本为 4.0.3,在创建项目时,勾选了 Lombok 依赖。

在代码中给 User 实体类添加了 @Data 注解,user 对象调用自带的 getName() 方法。当项目启动时,报如下错误:

bash 复制代码
java: 找不到符号
  符号: 方法 getName()
  位置: 类型为 com.sun3285.pojo.User 的变量 user

检查 pom.xml 文件,发现确实已经引入了 Lombok 依赖:

xml 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

开始怀疑 Lombok 依赖是否未生效,主要是两个方向:

  1. 本地问题,Lombok 依赖可能由于哪里配置不对,导致未生效;
  2. 兼容性问题,因为 Spring Boot 版本为 4.0.3,版本较高,怀疑 Lombok 依赖版本与 Spring Boot 版本不兼容,导致 Lombok 未生效。

以下是排查问题的整个过程:

排查方向一

将 Lombok 依赖配置可能出问题的地方都检查一遍:

  1. 实体类 User 是否加了 @Data 注解? 是!

  2. IDEA 是否安装了 Lombok 插件,并且插件是否启用? 是!

  3. 是否开启注解处理? 是!

  4. 在 IDEA 中打开实体类 User,通过 Ctrl + 鼠标左键 点击 @Data 注解,看是否能跳转到 Lombok 的源码? 是!

确保以上没问题后,清除 IDEA 缓存,删除项目目录下的 target 文件夹,重启 IDEA,重新启动项目,发现问题仍未解决。

于是开始排查方向二。

排查方向二

首先,手动在实体类 User 中,临时手动重写 getName()、toString() 等方法,启动项目,一切顺利,无问题。

于是,怀疑 Lombok 依赖版本与 Spring Boot 版本不兼容,导致 Lombok 未生效。

接着 ,将 Spring Boot 版本降低为 3.3.5,其他保持不变,经验证,问题仍未解决。说明该问题与 Spring Boot 版本无关。

下一步,搜索网上的资料,尝试了一些方法,如:

  1. 修改 pom.xml 文件中的 Lombok 依赖:去掉 <optional> 标签,并手动指定 Lombok 依赖的版本;
  2. 修改 pom.xml 文件中的插件 plugin 配置:去掉 <build> 部分的第一个插件 maven-compiler-plugin。

经验证,问题仍未解决。

最后,项目中就真的不能用 Lombok 依赖,只能手动为实体类写 getter 和 setter 方法了吗?

No!

接下来,介绍偶然发现的 Lombok 注解失效的解决方案。

解决方案

将 pom.xml 文件中,所有的插件 plugin 都注释掉,即以下部分。

清除 IDEA 缓存,删除项目目录下的 target 文件夹,重启 IDEA,重新启动项目,一切顺利,问题解决!

神奇的地方来了,下一步,将 pom.xml 文件中,上述所有的插件 plugin 都重新取消注释,即恢复原状。

清除 IDEA 缓存,删除项目目录下的 target 文件夹,重启 IDEA,重新启动项目,一切顺利,问题未复现!

进一步验证:

在项目编译后,在 target/classes/xxx/pojo/ 目录下找到实体类 User.class,打开,可以看到有自动生成的各种方法。

如果有知道原理的伙伴,欢迎评论区留言,一起交流讨论。

相关推荐
Rain的Java大神之路11 分钟前
面试被LeetCode 27(移除元素)问懵?别再用两层 for 循环了:一道“简单题”吃透双指针原地删除,附面试加分话术 + 11 个避坑清单
后端·leetcode·面试
悟天特斯12 分钟前
安防一体化:从“各管各的“到“全局联动“
java·大数据·网络·人工智能·物联网
70后写java的老码农21 分钟前
Spring Boot 3.x + ShardingSphere 5.x + MyBatis-Plus 3.x:订单分库分表实战(含两个踩坑记录)
java
霸道流氓气质25 分钟前
AI 翻译插件:翻译记忆级联复用、术语混合检索与结构化质量门禁的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
斯维赤31 分钟前
OCR到底是接入第三方API 还是自己封装?
java·ocr
利威尔xu37 分钟前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
码智社1 小时前
Redis 哨兵模式详解:从原理到生产实践
java·redis
救救孩子把1 小时前
结构化输出为何“格式正确、答案错误”?JSON Schema 的能力边界
android·java·json·agent·agent服务
猿究院--Cu-Sn合金1 小时前
Spring Boot + DeepSeek 求职 Agent 实践:工具注册、多轮调用与简历 JD 对比
数据库·人工智能·spring boot·后端·deepseek
程序员cxuan1 小时前
别学 subagent 了,很可能要凉了。
后端·agent·ai编程