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

Spring Boot多模块Maven项目Lombok注解构建失败问题排查

问题分析与解决方案

从你的配置细节来看,Maven构建时Lombok的@Data注解不生效,核心是两个配置问题导致的:

1. 父POM全局禁用了注解处理器

在父POM的pluginManagement区块中,maven-compiler-plugin配置了<compilerArgument>-proc:none</compilerArgument>,这个参数的作用是强制关闭所有注解处理器的执行。而Lombok正是通过注解处理器来自动生成getter/setter代码的,所以即便你在子模块里配置了annotationProcessorPaths,这个全局禁用的参数会直接覆盖子模块的配置,导致Lombok完全无法工作。

2. Lombok版本变量未定义

你的example-common模块POM中使用了${lombok.version}来指定Lombok版本,但不管是父POM还是子POM的properties里都没有定义这个变量值。Maven构建时会无法解析这个变量,间接影响注解处理器的正常加载。


具体修复步骤

步骤1:移除父POM中禁用注解处理器的配置

修改父POM里pluginManagement下的maven-compiler-plugin配置,删除<compilerArgument>-proc:none</compilerArgument>这一行:

<pluginManagement>
  <plugins>
    <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>
        <!-- 移除该行:<compilerArgument>-proc:none</compilerArgument> -->
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>

步骤2:添加Lombok版本属性

在父POM的properties块中添加Lombok的版本(建议使用与Spring Boot 2.1.1.RELEASE兼容的版本,比如官方适配的1.18.4):

<properties>
  <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
  <java-version>1.8</java-version>
  <lombok.version>1.18.4</lombok.version> <!-- 新增该行 -->
</properties>

步骤3:简化子模块的编译器配置

由于父POM已经在pluginManagement里统一定义了编译器的source和target版本,子模块的maven-compiler-plugin可以简化,只保留注解处理器路径的配置即可:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
          </path>
        </annotationProcessorPaths>
      </configuration>
    </plugin>
  </plugins>
</build>

完成以上修改后,执行mvn clean install重新构建,Lombok就能正常生成getter/setter方法了。IDE中正常是因为IDE单独配置了Lombok插件,而Maven构建完全依赖编译器注解处理器的配置,所以必须确保Maven的编译器配置正确开启注解处理器。

内容的提问来源于stack exchange,提问作者The Coder

火山引擎 最新活动