You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

升级Spring Boot 3后执行Maven命令出现cannot find symbol builder()错误

升级Spring Boot 3后执行Maven命令出现cannot find symbol builder()错误

我看了你升级Spring Boot 3后碰到的这个Lombok相关的编译错误,太懂这种明明代码改了Jakarta、配置也调了,但Maven还是抽风的感觉!结合你贴的pom文件,核心问题其实是版本不兼容导致Lombok的注解处理器没正常工作,生成的builder方法没被Maven识别到,咱们一步步来解决:

问题根源拆解

  1. Spring Boot Maven插件版本脱节:你现在用的插件版本是2.6.14,这是Spring Boot 2.x时代的版本,和Spring Boot 3的Jakarta EE环境完全不匹配。旧插件不知道怎么在新环境下处理Lombok的注解生成,直接导致编译时找不到Lombok自动生成的builder方法。
  2. Lombok版本偏旧:你用的1.18.26虽然勉强支持Jakarta,但对Spring Boot 3的适配还不够完善,部分场景下注解处理器会失效。
  3. 版本依赖混乱:你的pom里Spring Boot Starter依赖都是无版本的(应该是继承了父pom),但却手动指定了旧版的插件,这种混合配置很容易引发冲突。

具体修复步骤

1. 对齐Spring Boot Maven插件版本

如果你的项目继承了Spring Boot 3的父POM,直接删掉spring-boot-maven-pluginversion标签,让它自动继承父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

火山引擎 最新活动