升级Spring Boot 3后执行Maven命令出现cannot find symbol builder()错误
我看了你升级Spring Boot 3后碰到的这个Lombok相关的编译错误,太懂这种明明代码改了Jakarta、配置也调了,但Maven还是抽风的感觉!结合你贴的pom文件,核心问题其实是版本不兼容导致Lombok的注解处理器没正常工作,生成的builder方法没被Maven识别到,咱们一步步来解决:
问题根源拆解
- Spring Boot Maven插件版本脱节:你现在用的插件版本是2.6.14,这是Spring Boot 2.x时代的版本,和Spring Boot 3的Jakarta EE环境完全不匹配。旧插件不知道怎么在新环境下处理Lombok的注解生成,直接导致编译时找不到Lombok自动生成的builder方法。
- Lombok版本偏旧:你用的1.18.26虽然勉强支持Jakarta,但对Spring Boot 3的适配还不够完善,部分场景下注解处理器会失效。
- 版本依赖混乱:你的pom里Spring Boot Starter依赖都是无版本的(应该是继承了父pom),但却手动指定了旧版的插件,这种混合配置很容易引发冲突。
具体修复步骤
1. 对齐Spring Boot Maven插件版本
如果你的项目继承了Spring Boot 3的父POM,直接删掉spring-boot-maven-plugin的version标签,让它自动继承父POM的版本,这样能保证插件和Spring Boot核心版本完全一致;如果没继承父POM,就把插件版本改成和你用的Spring Boot 3对应的版本(比如用Spring Boot 3.2.x就配3.2.5,3.1.x就配3.1.10)。
修改后的插件配置示例:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 要么继承父POM去掉version,要么指定对应Spring Boot3的版本 --> <version>3.2.5</version> </plugin>
2. 升级Lombok到适配版
把Lombok版本升级到1.18.30及以上,推荐用1.18.32或最新稳定版,这个区间的版本对Jakarta EE的支持更成熟,能完美配合Spring Boot 3的编译环境。修改maven-compiler-plugin里的Lombok版本:
<path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> </path>
3. 升级Maven Compiler插件(可选但推荐)
把maven-compiler-plugin升级到3.12.0或更高版本,新版本对Java 17的注解处理支持更好,能减少编译时的兼容性问题:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <configuration> <source>17</source> <target>17</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> </path> </annotationProcessorPaths> </configuration> </plugin>
4. 清理编译缓存后重试
修改完配置后,先执行mvn clean清空旧的编译产物,然后再跑mvn compile验证编译是否正常,最后再执行mvn dependency:analyze,应该就能解决找不到builder方法的问题了。
为什么这些改动有效
Spring Boot 3彻底切换到了Jakarta EE API替代原来的Java EE,旧版本的Spring Boot插件和Lombok都没有针对这个变化做足够适配,导致注解处理器无法正常生成代码。通过对齐插件版本、升级Lombok,就能让Maven在Jakarta环境下正确识别Lombok的注解,自动生成builder等方法。
备注:内容来源于stack exchange,提问作者Meilan




