lombok与maven-lombok-plugin的区别是什么?能否互相替换?
Lombok 与 maven-lombok-plugin 差异及替换可行性解答
核心差异
两者属于完全不同类型的构件,功能定位没有重叠:
lombok是功能核心库,提供所有业务代码中用到的注解(如@Data、@Slf4j、@Builder等)以及编译期代码生成的核心逻辑,是项目使用Lombok功能的必需依赖,归属项目dependencies依赖树。maven-lombok-plugin是Maven构建辅助插件,仅作用于Maven构建生命周期,作用是简化注解处理器配置,无需开发者手动在maven-compiler-plugin中声明Lombok的注解处理器路径,归属项目build/plugins配置段,不会进入项目依赖树。
能不能直接替换?
绝对不可以直接替换,两者不是同类构件,无法互相替代:
- 把
maven-lombok-plugin放到dependencies中,不会提供任何业务代码需要的Lombok注解,会直接报注解找不到的编译错误。 - 把
lombok放到build/plugins中,Maven无法识别其为有效插件,会直接报错构建失败。
正确的配置方案
如果你需要移除项目中的maven-lombok-plugin,不需要替换成其他构件,只要调整两处配置即可保证Lombok功能正常:
- 保留
dependencies中的Lombok依赖,建议设置scope为provided,避免将其打入最终的应用包中:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>匹配你的项目使用的Lombok版本</version> <scope>provided</scope> </dependency>
- 在
maven-compiler-plugin的配置中显式声明Lombok的注解处理器路径,替代原有插件的作用:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1及以上稳定版本</version> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>和依赖中保持一致的版本号</version> </path> </annotationProcessorPaths> </configuration> </plugin>
注意事项
- 只要IDE端已经安装了Lombok支持插件,上述配置调整后,原有代码的所有Lombok功能完全不受影响
- 如果你的项目同时使用了其他注解处理器(如MapStruct、JPA静态元模型生成器),可以将对应的路径一并添加到
annotationProcessorPaths列表中
内容的提问来源于stack exchange,提问作者Sai Kumar
相关产品推荐
相关产品推荐

