You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lombok @Builder时IDEA正常但Maven编译找不到FooBuilder类

问题原因

这个问题是Java编译阶段的执行顺序和Lombok注解处理器的执行时机不匹配导致的:

Java编译器在执行注解处理器之前,会先对所有源码的语法、类型引用做前置校验,此时Lombok的@Builder注解还没运行生成FooBuilder静态内部类,编译器就会直接抛出找不到符号的错误。
IntelliJ IDEA内置了Lombok插件,会提前识别@Builder注解生成的类结构,因此本地运行不会报错,但是Maven的编译流程严格遵循JDK的标准编译阶段,就会触发校验失败。

还有一个常见的次要诱因:你只在maven-compiler-plugin的annotationProcessorPaths中配置了Lombok,没有在项目根依赖节点<dependencies>中引入scope为provided的Lombok依赖,导致编译期源码层面找不到Lombok相关的类定义。

解决方案

你可以根据自己的项目情况选择任意一种方案解决:

  • 方案1:补充Lombok基础依赖
    在项目pom.xml的<dependencies>节点下添加Lombok依赖(版本和annotationProcessorPaths中配置的版本保持一致即可):

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
    

    这个依赖仅作用于编译阶段,不会被打包到最终产物中。

  • 方案2:预先声明空的Builder内部类占位
    在Foo类中手动添加一个空的静态内部类FooBuilder,Lombok的@Builder注解会自动向这个已有的类中填充属性、链式方法等内容,不会覆盖你手动声明的类,编译器在前置校验阶段就能找到这个类,避免报错:

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public class Foo {
        // 新增占位内部类
        public static class FooBuilder {}
    
        private String submit;
        private String modify;
    
        public static Foo.FooBuilder ofSubmit(String submit) {
            return Foo.builder()
                    .submit(submit);
        }
    }
    
  • 方案3:升级maven-compiler-plugin版本
    将maven-compiler-plugin的版本升级到3.10.1及以上,新版本优化了注解处理器生成类的前向引用支持,可以兼容这种未生成类的引用场景:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.10.1</version>
        <!-- 其余原有配置保持不变 -->
    </plugin>
    

内容的提问来源于stack exchange,提问作者Alvaro Berrocal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:18:03