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

Maven编译失败:Lombok @Data注解未生效导致Getter方法找不到

Maven编译失败:Lombok @Data注解未生效导致Getter方法找不到

看起来你遇到了Lombok @Data注解在Maven编译时“罢工”的头疼问题——明明逻辑没问题,重启项目后突然就找不到自动生成的getter方法了,手动写boilerplate代码确实不是长久之计,我来帮你排查下可能的原因和解决办法。

问题本质

编译报错找不到getImages()getDataURL()这类方法,核心原因是Maven编译过程中,Lombok没有正确为你的实体类/DTO生成getter、setter等方法,导致编译器认为这些方法不存在。

具体解决办法

1. 统一Lombok版本并适配Java23

你当前的Lombok依赖版本是1.18.30,但Maven插件版本是1.18.20.0,版本不一致很可能导致兼容性问题;而且Java23是较新的版本,旧版Lombok可能对其支持不足。建议将Lombok依赖和插件都升级到支持Java23的最新稳定版本(比如1.18.34,该版本已完全支持Java21+)。

2. 正确配置Maven注解处理器(推荐方式)

Lombok本质是一个注解处理器,最可靠的方式是直接在maven-compiler-plugin中指定Lombok作为注解处理器,确保Maven编译时触发代码生成。修改你的POM配置如下:

<properties>
    <java.version>23</java.version>
    <lombok.version>1.18.34</lombok.version>
    <maven-compiler-plugin.version>3.12.1</maven-compiler-plugin.version>
</properties>

<dependencies>
    <!-- 其他依赖保持不变 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <optional>true</optional> <!-- 编译后不需要Lombok依赖 -->
    </dependency>
</dependencies>

<build>
    <plugins>
        <!-- Spring Boot插件保持不变 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <classifier>spring-boot</classifier>
                        <mainClass>*.ZoomOutApiApplication</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- 配置Maven编译插件,指定Lombok为注解处理器 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <!-- 指定Lombok作为注解处理器 -->
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

这种方式无需额外配置lombok-maven-plugin,直接通过Maven编译插件触发Lombok的代码生成,兼容性更稳定。

3. 检查IntelliJ IDEA的关键设置

虽然你是用Maven命令行编译,但IDE的设置可能间接影响构建结果,建议确认:

  • 打开File > Settings > Plugins,搜索Lombok插件并确保已启用
  • 打开File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing

4. 清理缓存并重新构建

Maven本地仓库的旧缓存可能导致版本冲突,执行以下步骤彻底清理:

  1. 手动删除本地Maven仓库中org/projectlombok目录(通常在~/.m2/repository/org/projectlombok
  2. 执行简化的构建命令:
mvn clean install -U

-U参数会强制更新依赖,避免缓存的旧版本干扰。

5. 备选:正确配置Lombok Maven插件(如果你偏好插件方式)

如果你坚持使用lombok-maven-plugin,需要为插件绑定编译阶段,确保Maven编译时触发它:

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>${lombok.version}.0</version> <!-- 注意版本后缀,比如1.18.34.0 -->
    <executions>
        <execution>
            <id>delombok</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>delombok</goal>
            </goals>
        </execution>
        <execution>
            <id>compile-lombok</id>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
        <execution>
            <id>test-compile-lombok</id>
            <phase>test-compile</phase>
            <goals>
                <goal>testCompile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

为什么之前的尝试没生效?

  • 你之前的lombok-maven-plugin配置没有绑定到Maven的编译阶段,所以Maven编译时根本没触发Lombok的代码生成
  • 依赖和插件版本不一致,导致兼容性问题
  • Java23的新特性可能需要更高版本的Lombok支持

按照上面的步骤调整后,应该能解决Lombok注解不生效的问题,不用再手动写getter/setter啦!

备注:内容来源于stack exchange,提问作者JoF

火山引擎 最新活动