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

目录

概述|背景

报错解析

解决方法

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插件共同协作,使得项目在任何构建环境下都能正确生成代码。

完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【异常解决】在idea中提示 hutool 提示 HttpResponse used withoud try-with-resources statement

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

搜维尔科技:提供人形机器人传感器的应用案例分析

视觉传感器 • 家庭服务场景&#xff1a;在家庭清洁机器人中&#xff0c;视觉传感器可以识别家具、障碍物的位置和形状&#xff0c;规划清洁路径&#xff0c;避开桌椅、宠物玩具等。如小米扫地机器人&#xff0c;通过视觉传感器与算法结合&#xff0c;能构建房间地图&#xff…

虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!

不拆发动机、不测缸压&#xff0c;只测个电流也能知道哪个缸压缩有问题&#xff1f;没错&#xff01;做个相对压缩测试&#xff0c;测下起动电流就行&#xff0c;简单又实用&#xff01;今天&#xff0c;从原理到方法&#xff0c;几分钟教会你&#xff01; 我们都知道&#xf…

自然语言处理NLP_[1]-NLP入门

文章目录 1.自然语言处理入门1. 什么是自然语言处理2.自然语言处理的发展简史3 自然语言处理的应用场景1. **机器翻译**2. **文本分类**3. **情感分析**4. **问答系统**5. **文本生成**6. **信息抽取**7. **语音识别与合成**8. **文本摘要**9. **搜索引擎优化**10. **聊天机器人…

无限使用Cursor

原理&#xff1a;运行程序获得15天的免费试用期&#xff0c;重新运行程序重置试用期&#xff0c;实现无限使用。免费的pro账号&#xff0c;一个月有250的高级模型提问次数。 前提&#xff1a;已安装cursor cursor-vip工具&#xff1a;https://cursor.jeter.eu.org?p95d60efe…

LIMO:少即是多的推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型&#xff08;LLM&#xff09;中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据&#xff08;通常超过 100,000 个示例&#xff09;&#xff0c;但本文展…

一种基于Leaflet.Legend的图例动态更新方法

目录 前言 一、场景再现 1、需求描述 2、核心方法介绍 3、存在的问题 二、问题解决 1、重复解决办法 2、图例不展示解决办法 3、成果展示 三、总结 前言 在当今数字化时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术已经广泛应用于各个领域&#xff0c;…

【AI时代】使用ollama私有化部署deepseek的过程及问题记录

文章目录 说明下载模型通过ollama下载通过modelscope下载 部署open-webui问题记录临时目录空间不足单机多卡部署后台启动 说明 对于DeepSeek的私有化部署&#xff0c;现在网上已经有很全面的资料了&#xff0c;本文主要记录部署以及部署过程中遇到的问题。目前对于这些问题&am…

使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)上安装 Java 8

文章目录 1. 安装 SDKMAN!2. 查找可用的 Java 8 版本3. 安装 Java 84. 验证安装5. 切换 Java 版本&#xff08;可选&#xff09;6. 解决 ARM 架构兼容性问题总结 可以使用 SDKMAN! 在 Mac&#xff08;包括 ARM 架构的 M1/M2 芯片&#xff09;上安装 Java 8。SDKMAN! 是一个强大…

存储异常导致的Oracle重大生产故障

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…

计算机视觉-拟合

一、拟合 拟合的作用主要是给物体有一个更好的描述 根据任务选择对应的方法&#xff08;最小二乘&#xff0c;全最小二乘&#xff0c;鲁棒最小二乘&#xff0c;RANSAC&#xff09; 边缘提取只能告诉边&#xff0c;但是给不出来数学描述&#xff08;应该告诉这个点线是谁的&a…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具演示05

SQLSERVER的ImpDp和ExpDp工具演示 1、表部分数据导出 (-query) ※「-query」和「-include_table」必须一起使用 「-query」后面字符串是sql文的where语句&#xff0c;但要注意要使用%&#xff0c;需要写%% 验证用&#xff1a;导出的表&#xff0c;导入到新的数据库 db的数…

《qt6+Open3d网格读取》

《qt6+Open3d网格读取》 效果显示一、创建步骤1.1 创建动作及槽函数二、注意效果显示 一、创建步骤 1.1 创建动作及槽函数 按照以下步骤创建动作,并将动作拉入菜单栏文件中,创建槽函数。 在mainwindow.h添加 private:geometry

mapbox进阶,添加绘图扩展插件,绘制圆形

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…

C#控件开发6—指示灯

按钮功能&#xff1a;手自动旋转&#xff0c;标签文本显示、点击二次弹框确认&#xff08;源码在最后边&#xff09;&#xff1b; 【制作方法】 找到控件的中心坐标&#xff0c;画背景外环、内圆&#xff1b;再绘制矩形开关&#xff0c;进行角度旋转即可获得&#xff1b; 【关…

电商平台的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统商品交易信息管理难度大&#xff0c;容错率低&#xff0…

【deepseek实战】绿色好用,不断网

前言 最佳deepseek火热网络&#xff0c;我也开发一款windows的电脑端&#xff0c;接入了deepseek&#xff0c;基本是复刻了网页端&#xff0c;还加入一些特色功能。 助力国内AI&#xff0c;发出自己的热量 说一下开发过程和内容的使用吧。 目录 一、介绍 二、具体工作 1.1、引…

【OS】AUTOSAR架构下的Interrupt详解(上篇)

目录 前言 正文 1.中断概念分析 1.1 中断处理API 1.2 中断级别 1.3 中断向量表 1.4 二类中断的嵌套 1.4.1概述 1.4.2激活 1.5一类中断 1.5.1一类中断的实现 1.5.2一类中断的嵌套 1.5.3在StartOS之前的1类ISR 1.5.4使用1类中断时的注意事项 1.6中断源的初始化 1.…

llama.cpp GGUF 模型格式

llama.cpp GGUF 模型格式 1. Specification1.1. GGUF Naming Convention (命名规则)1.1.1. Validating Above Naming Convention 1.2. File Structure 2. Standardized key-value pairs2.1. General2.1.1. Required2.1.2. General metadata2.1.3. Source metadata 2.2. LLM2.2.…

Java/Kotlin双语革命性ORM框架Jimmer(一)——介绍与简单使用

概览 Jimmer是一个Java/Kotlin双语框架 包含一个革命性的ORM 以此ORM为基础打造了一套综合性方案解决方案&#xff0c;包括 DTO语言 更全面更强大的缓存机制&#xff0c;以及高度自动化的缓存一致性 更强大客户端文档和代码生成能力&#xff0c;包括Jimmer独创的远程异常 …