IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

article/2025/8/15 7:44:03

目录

概述|背景

报错解析

解决方法

IDEA配置解决

Pom配置插件解决


概述|背景

报错发生背景:在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。

本文讨论在上述背景下发生的报错原因和解决办法,如果仅为了解决BUG不论原因直接通过目录跳到【解决方法】,如果发生背景不同请找其他博文寻求解决。

Lombok"找不到符号"代码报错一般位置:

1. 代码: log.info("日志内容..");   (使用了注解@Slf4j)

2. 代码:class.getX(); (使用了注解@Data

报错解析

1. 为什么会出现“找不到符号”的报错呢?

我们遇到这个报错时一般都会想到:“难道是这个变量没有定义?”,但是转念一想我们所引用的是Lombok给我们提供的变量。

所以,我们应该去探索Lombok内部,我们在使用log(log.info("日志内容.."))变量时,到底发生了什么。

实际上,当我们编写了代码:log.info("日志内容.."),在项目编译时遇到log变量,会发生的事情是自动帮我们补充了代码:private static final Logger log = LoggerFactory.getLogger(...); 向我们提供了log这个变量引用

所以,如果这段“自动生成的代码没有自动生成的话,那么log变量自然就找不到,报错"找不到符号"那也就合理解释了。

当然,代码:class.getX(); 原理也是一样的,只不过自动生成的代码不同罢了(这段代码自动生成的是getter函数)。

-.- | `.`

2. 自动生成代码的时机?

当我们明白了会报“找不到符号”的原因就是该自动生成的代码没有生成后,我们就该研究一下“使用lombok时何时帮我们自动生成代码”。

我们在使用Lombok时一般都会在所在类上添加"lombok相关注解"

例如:想使用日志log.info(),我们就该声明注解"@Slf4j",当想要自动给类中所有字段添加Getter和Setter函数时就该声明"@Data"对吧。

实际上这些注解就会成为自动生成代码位置的锚点。

当项目代码编译时遇到这些注解,“lombok注解处理器”就会识别并生成相应代码。

+.+ | *。*

 3. 注解处理器-最终解释 

最终我们会把问题聚焦在"注解处理器是否正确加载"的问题上来。

因为如果lombok注解处理器没有正确加载,那么当代码编译时遇到"lombok变量"自然就没有办法识别。

所以,我们下面我们的解决方案就是“让注解处理器正确工作

解决方法

IDEA配置解决

添加VM选项-D jps.track.ap.dependencies=false

这是目前网络上热门的解决方法,但这是一种回避型”的解决方案,在低版本的SpringBoot项目中有效,但是在高版本3.x中却不一定有效。

 方法解释:

1. 首先我们应该知道一件事:IDEA(IntelliJ IDEA)自带了Lombok插件,正常情况下我们在IDEA中编写"lombok代码"是能够正常运行(能正常“自动生成代码”)的。

 2. 当我们在项目Pom中引入了Lombok依赖之后,Lombok 注解处理器会在编译时被 Maven 加载并执行,生成 Lombok 注解(如 @Slf4j, @Getter, @Setter)所需要的代码但是引入后IDEA自带的Lombok插件优先级低于Lombok依赖提供的注解处理器。

3. 所以当引入Lombok依赖后,Maven代码编译时会优先寻找Lombok依赖提供的注解处理器(追踪依赖),如果没有,直接报错“找不到符号”,而不是去使用IDEA自带的插件去生成代码。

4. 上面这个参数通过禁用 IDEA 的依赖追踪机制,让编译过程 忽略 Maven 构建时依赖检查失败的情况。这相当于告诉 IDEA:“不要强制检查这些注解处理器的依赖,不要因为 Maven 的编译失败而阻止代码编译。”

5. 这样一来,即使 Maven 没有找到注解处理器,IDEA 插件仍然可以继续使用,并且 Lombok 的相关代码仍然可以通过 IDE 插件自动生成,从而避免报错。

总结:添加VM选项参数jps.track.ap.dependencies=false实际上并没有解决根本问题只是有忽略了问题导致的编译终止,让编译继续,使得IDEA的lombok插件可以兜底解决

(并非所有IDE都默认支持lombok,所以这种解决方案理论上并不是最好的)

Pom配置插件解决

 合理的解决方案应该是我们到Pom文件中配置Lombok的注解处理器

<!-- pom.xml -->
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>版本号需要和boot版本匹配</version></path></annotationProcessorPaths></configuration>
</plugin>

配置好记得"clean"一下,然后重新maven编译,运行。 

正确配置后,当Maven编译时就能正确加载到Lombok注解处理器,使得"lombok代码"能正常生成,避免报错发生。 

值得注意的是:在配置如上插件的时候lombok版本最好填一下<version>版本号</version>

如果不显示填的话,大概率会从maven远程仓库调用下载最新版或稳定版的Lombok,自动下载的版本不一定和你SpringBoot项目版本兼容,依然会报错

所以,请到spring-boot-dependencies.pom中查看boot项目版本对应的Lombok版本

文件查找路径/方法:

最后总结:

1. 问题的核心就在于Lombok注解处理器没有被正确加载或配置,导致Maven在编译过程中报错,无法生成相应的代码。

~.~ | ``

2. 尽管使用VM选项参数 -Djps.track.ap.dependencies=false 可以避免报错,但最好是确保Maven的Lombok注解处理器配置正确,以确保Maven构建过程和IDEA插件共同协作,使得项目在任何构建环境下都能正确生成代码。

完。

延申出的问题

 当我们解决掉了"找不到符号"的报错后,很可能再后续的实际开发中会遇到的BUG:

1. 406:Not Acceptable

2. No converter for [class X] with preset Content-Type 'application/json;charset=UTF-8'].

因为出现过上面的问题,所以报错这些很大可能是我们的lombok注解处理器仍然没有能正常工作

 测试:我们可以手动的给报错所在的类所有字段添加上Getter和Setter方法

ps: 如果是用IDEA,可以使用快捷键【alt + insert】生成。

如果你发现手动添加上Getter和Setter方法后报错消除说明还是上面所说的问题

解决

 直接在IDEA设置中把注解处理器的获取方式设为"从项目类路径获取处理器"。

设置后,应用,lean,重新启动!

真完。 


http://www.hkcw.cn/article/gBwdskPfDU.shtml

相关文章

【中间件】Pulsar集群安装

目录 一、Pulsar介绍 1.1 Pulsar基本介绍 1.2 Pulsar架构 Producer & Consumer Apache Zookeeper Pulsar Brokers Apache Bookkeeper 二、Zookeeper集群安装 三、Pulsar集群安装 3.1 bookie与broker配置 3.1.1 修改bookie配置文件 3.1.2 修改broker配置文件 3…

41-dify案例分享-基于database插件实现Text2sql的数据库查询图表工作流

1 前言 Text2SQL&#xff08;或称NL2SQL&#xff09;是一种自然语言处理技术&#xff0c;旨在将自然语言&#xff08;Natural Language&#xff09;问题转化为关系型数据库中可执行的结构化查询语言&#xff08;Structured Query Language&#xff0c;SQL&#xff09;&#xf…

数据库-MySQL 实战项目——学生选课系统数据库设计与实现(附源码)

一、前言 该项目非常适合MySQL入门学习的小伙伴&#xff0c;博主提供了源码、数据和一些查询语句&#xff0c;供大家学习和参考&#xff0c;代码和表设计有什么不恰当还请各位大佬多多指点。 所需环境 MySQL可视化工具&#xff1a;navicat&#xff1b; 数据库&#xff1a;MySq…

中小型企业大数据平台全栈搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆级配置指南

目录 背景‌一、环境规划与依赖准备‌1. 服务器规划(3节点集群)2. 系统与依赖‌3. Hadoop生态组件版本与下载路径4. 架构图二、Hadoop(HDFS+YARN)安装与配置‌1. 下载与解压(所有节点)2. HDFS高可用配置3. YARN资源配置‌4. 启动Hadoop集群三、MySQL安装与Hive元数据配置…

从 0~1 保姆级 详细版 PostgreSQL 数据库安装教程

PostgreSQL数据库安装 PostgreSQL官网 【PostgreSQL官网】 | 【PostgreSQL安装官网_Windows】 安装步骤 step1&#xff1a; 选择与电脑相对应的PostgreSQL版本进行下载。 step2&#xff1a; 双击打开刚才下载好的文件。 step3&#xff1a; 在弹出的setup窗口中点击 …

【Spring Boot】网页五子棋项目中遇到的困难及解决方法

目录 一、HikariPool-1 - Starting异常二、Invalid bound statement (not found)异常三、The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary异常四、The server time zone value时区报错异常五、补充知识点…

上海启动3-6岁儿童近视监测 推进视力健康关口前移

6月1日,第30个全国“爱眼日”上海市儿童青少年眼健康主题活动发布了上海市儿童青少年近视率最新监测情况。2024年上海市6-18岁儿童青少年近视率比2023年下降1.5个百分点。为推进近视预防关口前移,上海市眼病防治中心启动了“低龄儿童近视监测与干预服务项目”,聚焦3-6岁近视…

郑钦文首次晋级法网8强 刷新个人最佳战绩

北京时间6月1日晚,在法网女单1/8决赛中,8号种子郑钦文以7-6(5)、1-6、6-3战胜19号种子俄罗斯选手萨姆索诺娃,职业生涯首次跻身法网女单八强,刷新个人赛会最佳战绩。这也是中国选手时隔14年再次闯进法网八强。首盘比赛中,郑钦文两次先被破发但迅速回破,双方战至抢七。最终…

新势力5月销量榜解读 零跑三连冠

零跑汽车再次夺得新势力月销量冠军。6月1日,各大造车新势力发布了5月份的交付数据。零跑汽车连续三个月稳居榜首,鸿蒙智行和理想汽车分别位列第二、第三,销量均重回4万辆。整体来看,5月车市进一步回暖,尤其是极氪获得了最高的环比增速,达37.74%。5月,零跑汽车全系交付再…

江苏城市联赛:南通队4-0客胜泰州队 多点开花完胜对手

北京时间6月1日,江苏城市联赛第3轮比赛中,泰州队主场迎战南通队。下半场,郭凯楠单刀过掉门将后推射破门,为南通队首开纪录。随后张浩楠边路超车后传球,文俊秀破门扩大比分。接着程鑫门前补射得手,进一步巩固了南通队的领先优势。比赛尾声,李贤成过掉对手后单刀推射再下一…

当地回应上海迪士尼游客扭打 因拍照起冲突

5月31日,有网友发布视频称,在上海迪士尼发生了一起情侣和一家三口之间的冲突事件,引发了广泛关注。视频中可以看到双方在现场扭打,周围的人纷纷上前劝阻。据了解,该事件发生在5月31日,地点并非排队区域,而是游客自由打卡拍照的地方。情侣和一家三口因拍照问题产生了争执…

上海迪士尼有游客打架 警方通报 因拍照引发冲突

近日,一段上海迪士尼度假区内情侣与带孩子的夫妇发生争执的视频引起了网友们的广泛关注。根据浦东公安分局的通报,5月31日傍晚6点左右,警方接到报警称迪士尼乐园内有人打架。经初步调查,事件起因是22岁的闫某某与女友在拍照时,36岁的刘某某夫妻的女儿进入了拍摄画面,双方…

生涯首次!郑钦文晋级法网8强 三盘激战创佳绩

北京时间6月1日晚,法网女单第四轮较量中,中国选手郑钦文与俄罗斯选手萨姆索诺娃展开激烈对决。经过三盘大战,郑钦文以2比1胜出,成功晋级八强,创造了个人在法网的最佳战绩。郑钦文和萨姆索诺娃此前曾交手5次,郑钦文以2胜3负略处下风。不过,在红土场上两人唯一的一次交手中…

苏超为何“比赛第一友谊第十四” 城市荣耀与纯粹竞技

足球世界中,许多充满底蕴比拼与恩怨情仇的高手对决,被冠以“德比”之名享誉全球。例如意大利米兰德比、西班牙国家德比、英格兰曼彻斯特德比以及阿根廷河床和博卡青年超级德比等,无不令球迷激动不已,话题度极高。然而在2025年初夏,首届江苏城市足球联赛舞台上,“十三太保…

百名“奇迹宝宝”庆六一 抗癌妈妈的希望之光

“我想当航天员,飞向太空。”“我想当白衣天使,治愈患者。”“我想有个美丽的花园。”31日,在北京大学人民医院综合行政楼10层的小会议厅里,孩子们的欢声笑语充满了整个空间。他们都是在妈妈抗癌过程中出生的“奇迹宝宝”,这次聚会是为了迎接即将到来的“六一”国际儿童节…

上海警方通报迪士尼游客打架 因拍照引发冲突

近日,一段上海迪士尼度假区内两对游客发生纠纷的视频引起了广泛关注。事件发生在5月31日18时左右,浦东公安分局接到报警称迪士尼乐园内有人打架。经初步调查,22岁的闫某某与女友在拍照时,因36岁的刘某某夫妻的女儿进入拍摄画面而引发争执,随后双方发生了肢体冲突。冲突导致…

法网:斯瓦泰克艰难逆转莱巴金娜 豪取25连胜

6月1日,在法国网球公开赛女单第四轮比赛中,四届赛会冠军、5号种子斯瓦泰克以2-1(1-6、6-3、7-5)逆转战胜12号种子莱巴金娜,本赛季第三次击败对手,实现了法网25连胜。波兰名将因此获得了430分和44万欧元奖金。她已连续六年闯入法网八强,并且这是她第11次跻身大满贯八强。…

姆巴佩去年采访称不希望巴黎赢欧冠 未来再夺桂冠

北京时间6月1日,巴黎圣日耳曼在欧冠决赛中以5-0战胜国际米兰,夺得冠军。这一胜利让人们重新关注姆巴佩去年12月份接受CANAL+采访时的言论。当时,姆巴佩被问及“巴黎能否赢得欧冠冠军”的问题时,他表示自己并不希望巴黎立即拿到欧冠奖杯。姆巴佩在那次采访中谈到了许多场内场…

一舟载千年的中式浪漫具象化了 从古至今的文化传承

端午节活动中最具节日气氛的莫过于赛龙舟。“舟”在中国历史悠久,不仅是一种交通工具,还承载着丰富的文化内涵。我国古代造船技艺可以追溯到新石器时代。浙江跨湖桥遗址出土的一艘距今8000年的马尾松独木舟被称为“中华第一舟”。这艘独木舟采用“火焦法”凿制而成,证明了刳…

液态神经网络(Liquid Neural Networks,LNN ):动态时序建模的生物学革命——MIT用微分方程重构AI的时变认知系统

一、通俗解读&#xff1a;当神经网络学会“流动” 1.1 核心思想突破 ​​液态神经网络&#xff08;Liquid Neural Networks, LNN&#xff09;​​ 的核心创新在于&#xff1a;​​将静态神经网络转化为由微分方程驱动的动态系统​​&#xff0c;其革命性体现在&#xff1a; ​…