Maven能否使用dependencyManagement中定义的版本配置annotationProcessorPath?
解决方案
你可以通过以下两种方式复用BOM中定义的lombok版本,无需硬编码版本号:
方案一:通过BOM统一属性实现(推荐)
这是企业级项目最常用的维护方式,操作步骤如下:
- 在你的
common-bom的pom.xml中统一声明版本属性:
<properties> <!-- 统一管理lombok版本,所有子项目/配置共用 --> <org.projectlombok.version>1.18.20</org.projectlombok.version> </properties>
- 在
common-bom的dependencyManagement中引用该属性定义lombok依赖:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> </dependency>
- 在你的项目maven-compiler-plugin配置中直接引用该属性即可:
<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths combine.children="append"> <annotationProcessorPath> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> </annotationProcessorPath> </annotationProcessorPaths> </configuration> </plugin>
后续版本升级只需要修改common-bom中的属性值即可全局生效。
方案二:直接读取dependencyManagement中的版本(无需修改BOM)
如果你没有权限修改公共BOM,可以直接通过Maven内置表达式读取已导入的dependencyManagement中的版本号:
<annotationProcessorPath> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${project.dependencyManagement.dependencies['org.projectlombok:lombok'].version}</version> </annotationProcessorPath>
该方式不需要额外定义属性,直接复用BOM中已经声明的lombok版本,适合无法修改公共物料的场景。
原理说明
普通项目依赖声明时Maven会自动继承dependencyManagement中定义的版本,但annotationProcessorPaths属于插件的自定义配置项,Maven不会主动为其做版本解析,因此需要手动指定版本,通过上述两种方式即可实现版本全局统一。
内容的提问来源于stack exchange,提问作者PapaFreud
相关产品推荐
相关产品推荐

