Spring Boot多模块构建时Lombok方法未生成导致编译失败
解决多模块项目中Lombok编译失败问题
核心问题分析
运行时正常是因为IDE默认启用了Lombok插件,会自动处理注解生成代码;但Maven构建时,common模块编译阶段没有正确触发Lombok注解处理器,导致生成的class文件里没有get/set、builder这些方法,下游的module_one编译时自然找不到符号。
分步解决方案
1. 统一父pom的Lombok依赖配置
在父项目pom.xml中统一管理Lombok版本,避免子模块版本不一致:
<dependencyManagement> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <!-- 必须用适配Java17的版本,1.18.24及以上均可 --> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement>
2. 配置common模块的注解处理器
common作为共享库,必须在自身编译阶段生成Lombok代码,因此在common的pom.xml中添加maven-compiler-plugin并指定Lombok为注解处理器:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <!-- 适配Java17的插件版本 --> <configuration> <source>17</source> <target>17</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
同时在common的pom.xml中引入Lombok依赖:
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
3. 正确配置module_one的模块化与依赖
- 在module_one的
module-info.java中,确保对common的依赖为requires transitive,同时声明Lombok为静态依赖:
module com.demo.module_one { requires transitive com.demo.common; requires static lombok; requires org.springframework.boot; requires org.springframework.boot.autoconfigure; opens com.demo.module_one to org.springframework.boot; exports com.demo.module_one; }
- module_one的pom.xml只需引入common依赖,无需重复配置Lombok注解处理器(common已编译好带Lombok生成方法的class文件):
<dependencies> <dependency> <groupId>com.demo</groupId> <artifactId>common</artifactId> <version>${project.version}</version> </dependency> <!-- Spring Boot相关依赖 --> </dependencies>
4. 清理并重新构建
执行以下命令彻底清理并构建项目:
mvn clean install -DskipTests
关键注意点
- 必须使用适配Java17的Lombok版本,老版本对模块化和Java17的支持存在缺陷。
- 上游模块(common)必须自行完成Lombok注解处理,不能依赖下游模块(module_one)处理。
- 确保命令行Maven与IDE使用的Maven版本一致,避免配置差异导致的问题。
内容的提问来源于stack exchange,提问作者Stack Spring
相关产品推荐
相关产品推荐

