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插件共同协作,使得项目在任何构建环境下都能正确生成代码。
完。
相关文章:
IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决
目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景:在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法,如果仅为了解决BUG不论原…...
差速驱动机器人MPC算法实现-C++
差速驱动机器人,其运动学模型需要考虑线速度和角速度。MPC(模型预测控制)需要建立预测模型,并在每个控制周期内求解优化问题。 差速驱动机器人的运动学方程通常包括位置(x, y)和航向角θ,线速度…...
将仓库A分支同步到仓库B分支,并且同步commit提交
一、 问题 有一仓库A 和 一仓库B, 需要将仓库A分支a1所有提交同步推送到仓库B分支b1上 二、 解决 2.1、 首先需要仓库A、仓库B的权限, 2.2、将仓库A clone到本地, 进入A目录,并且切换到a1分支 cd A ## A 为A仓库clone到本地代…...
kafka生产者之发送模式与ACK
文章目录 Kafka的发送模式Kafka的ack机制发送模式与ack的关联重试次数总结 在Kafka中,发送模式与ack机制紧密相关,它们共同影响着消息发送的可靠性和性能。 Kafka的发送模式 发后即忘(Fire and Forget):生产者发送消息…...
C++字符串相关内容
字符串 字符串,本质上是一个接一个字符的一组字符。字母、数字、符号等。 const char* 字符串名 字符后面会有一个空终止符,为0。 字符串从指针的内存地址开始,然后继续下去,直到它碰到0,然后意识到字符串终止了。 …...
Windows Docker笔记-Docker拉取镜像
通过在前面的章节《安装docker》中,了解并安装成功了Docker,本章讲述如何使用Docker拉取镜像。 使用Docker,主要是想要创建并运行Docker容器,而容器又要根据Docker镜像来创建,那么首当其冲,必须要先有一个…...
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工
目录 决策树:代码设计代码: 决策树: 代码设计 代码: class Solution {boolean[][] vis;int ret,m,n;public int getMaximumGold(int[][] grid) {m grid.length;n grid[0].length;vis new boolean[m][n]; for(int i 0; i <…...
07苍穹外卖之redis缓存商品、购物车(redis案例缓存实现)
课程内容 缓存菜品 缓存套餐 添加购物车 查看购物车 清空购物车 功能实现:缓存商品、购物车 效果图: 1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压…...
使用DeepSeek的技巧笔记
来源:新年逼自己一把,学会使用DeepSeek R1_哔哩哔哩_bilibili 前言 对于DeepSeek而言,我们不再需要那么多的提示词技巧,但还是要有两个注意点:你需要理解大语言模型的工作原理与局限,这能帮助你更好的知道AI可完成任务…...
Unity-Mirror网络框架-从入门到精通之CouchCoop示例
文章目录 前言示例NetworkManagerCouchPlayerManagerCouchPlayerPlatformMovementMovingPlatformCameraViewForAllCanvasScript前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多…...
Spring Boot Web 入门
目录 Spring Boot Web 是 Spring Boot 框架的一个重要模块,它简化了基于 Spring 的 Web 应用程序的开发过程。以下是一个 Spring Boot Web 项目的入门指南,涵盖了项目创建、代码编写、运行等关键步骤。 1. 项目创建 使用 Spring Initializr 使用 IDE …...
C++ 顺序表
顺序表的操作有以下: 1 顺序表的元素插入 给定一个索引和元素,这个位置往后的元素位置都要往后移动一次,元素插入的步骤有以下几步 (1)判断插入的位置是否合法,如果不合法则抛出异常 (2&…...
SQL-leetcode—1327. 列出指定时间段内所有的下单产品
1327. 列出指定时间段内所有的下单产品 表: Products ------------------------- | Column Name | Type | ------------------------- | product_id | int | | product_name | varchar | | product_category | varchar | ------------------------- product_id 是该表主键(具…...
DeepSeek图解10页PDF
以前一直在关注国内外的一些AI工具,包括文本型、图像类的一些AI实践,最近DeepSeek突然爆火,从互联网收集一些资料与大家一起分享学习。 本章节分享的文件为网上流传的DeepSeek图解10页PDF,免费附件链接给出。 1 本地 1 本地部…...
机器学习中常用的评价指标
一、分类任务常用指标 1. 准确率(Accuracy) 定义:正确预测样本数占总样本数的比例。优点:直观易懂,适用于类别平衡的数据。缺点:对类别不平衡数据敏感(如欺诈检测中99%的负样本)。…...
3. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--环境搭建
构建现代云原生应用程序时,开发环境的搭建至关重要。NET Aspire 作为一款专为云原生应用设计的开发框架,提供了一整套工具、模板和集成包,旨在简化分布式系统的构建和管理。开始项目初始化之前,确保开发环境的正确配置是成功的第一…...
【Golang学习之旅】Go + MySQL 数据库操作详解
文章目录 前言1. GORM简介2. 安装GORM并连接MySQL2.1 安装GORM和MySQL驱动2.2 连接MySQL 3. GORM数据模型(Model)3.1 定义User结构体3.2 自动迁移(AutoMigrate) 4. GORM CRUD 操作4.1 插入数据(Create)4.2 …...
33.日常算法
1.螺旋矩阵 题目来源 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] class Solution { public:vec…...
ArgoCD实战指南:GitOps驱动下的Kubernetes自动化部署与Helm/Kustomize集成
摘要 ArgoCD 是一种 GitOps 持续交付工具,专为 Kubernetes 设计。它能够自动同步 Git 仓库中的声明性配置,并将其应用到 Kubernetes 集群中。本文将介绍 ArgoCD 的架构、安装步骤,以及如何结合 Helm 和 Kustomize 进行 Kubernetes 自动化部署。 引言 为什么选择 ArgoCD?…...
每日Attention学习22——Inverted Residual RWKV
模块出处 [arXiv 25] [link] [code] RWKV-UNet: Improving UNet with Long-Range Cooperation for Effective Medical Image Segmentation 模块名称 Inverted Residual RWKV (IR-RWKV) 模块作用 用于vision的RWKV结构 模块结构 模块代码 注:cpp扩展请参考作者原…...
机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战
前一篇文章,使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课:引领人工智能新时代【梗直哥瞿炜】 线性代数、微积分、概率论 …...
UNI-MOL: A UNIVERSAL 3D MOLECULAR REPRESENTATION LEARNING FRAMEWORK
UNI-MOL: A UNIVERSAL 3D MOLECULAR REPRESENTATION LEARNING FRAMEWORK Neurips23 推荐指数:#paper/⭐⭐⭐#(工作量不小) 动机 在大多数分子表征学习方法中,分子被视为 1D 顺序标记或2D 拓扑图,这限制了它们为下游任务整合…...
SQL Server查询计划操作符(7.3)——查询计划相关操作符(6)
7.3. 查询计划相关操作符 48)Key Lookup:该操作符对一个有簇索引的表进行书签查找。参数列包含簇索引的名字和用于查找簇索引中数据行的簇键。该操作符总是伴随一个Nested Loops操作符。如果其参数列中出现WITH PREFETCH子句,则查询处理器已决定使用异步预取(预读,read-ah…...
C语言【基础篇】之数组——解锁多维与动态数组的编程奥秘
数组 🚀前言🦜数组的由来与用途🌟一维数组详解🖊️二维数组进阶💯动态数组原理🤔常见误区扫盲💻学习路径建议✍️总结 🚀前言 大家好!我是 EnigmaCoder。本文收录于我的专…...
C++ 字符串编码转换
UTF8 的string 转 UTF16 的 wstring std::wstring Utf8ToUtf16(const std::string& utf8Str) { // 获取 UTF-16 字符串所需的缓冲区大小 int wstrLength = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, NULL, 0); if (wstrLength == 0) { // …...
通讯录管理小程序
通讯录管理系统 是对c基础语法的巩固,比较简单的一个小程序,重点在于养成良好的c代码习惯。 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统 下面是一些需要实现的功能: 1. 添加联系人 功能描述&…...
掌握API和控制点(从Java到JNI接口)_38 JNI从C调用Java函数 01
1. Why? 将控制点下移到下C/C层 对古典视角的反思 App接近User,所以App在整体架构里,是主导者,拥有控制权。所以, App是架构的控制点所在。Java函数调用C/C层函数,是合理的。 但是EIT造形告诉我们: App…...
理解UML中的四种关系:依赖、关联、泛化和实现
在软件工程中,统一建模语言(UML)是一种广泛使用的工具,用于可视化、设计、构造和文档化软件系统。UML提供了多种图表类型,如类图、用例图、序列图等,帮助开发者和设计师更好地理解系统的结构和行为。在UML中…...
windows蓝牙驱动开发-蓝牙 LE 邻近感应配置文件
邻近感应检测是蓝牙低功耗 (LE) 的常见用途。 本部分提供了创建可用于开发 UWP 设备应用的邻近感应配置文件的设备实现的指南。 在开发此应用之前,应熟悉蓝牙 LE 函数和蓝牙 LE 邻近感应配置文件规范。 示例服务声明 蓝牙低功耗引入了一个新的物理层,…...
【截图】selenium自动通过浏览器截取指定元素div的图片
【截图】selenium自动通过浏览器截取指定元素div的图片 思路 截取完整网页截图 通过元素的坐标 截图到指定位置的图片 前提是已经获取到 driver 了 # 定位目标divtarget_div driver.find_element(By.CLASS_NAME, headlines-right)# 获取div的位置和大小location target_div…...
