Maven Compiler Plugin无法解析BOM中定义版本的依赖问题
问题根因与解决方案
为什么BOM管不了注解处理器的版本?
Maven的BOM默认仅管控项目<dependencies>和<dependencyManagement>节点下的依赖版本,但annotationProcessorPaths属于maven-compiler-plugin插件的内部配置依赖,不属于项目常规依赖范畴,所以不会自动继承BOM中定义的版本,必须显式关联。
解决方法
在父POM的<dependencyManagement>中声明这些注解处理器的依赖(版本已在BOM中定义的话,这里无需重复写版本,直接继承BOM即可),然后在插件的annotationProcessorPaths里只填写groupId和artifactId。
示例配置:
- BOM中的依赖声明(确保父POM已导入该BOM):
<dependencyManagement> <dependencies> <!-- BOM中统一定义注解处理器版本 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.5.5.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>6.4.4.Final</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement>
- 父POM中maven-compiler-plugin的配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <!-- 无需指定版本,自动从dependencyManagement(即BOM)获取 --> </path> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> </path> <path> <groupId>org.hibernate</groupId> <artifactId>hibernate-jpamodelgen</artifactId> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
这样配置后,Maven会从dependencyManagement(继承自BOM)中读取注解处理器的版本,无需重复定义。
内容的提问来源于stack exchange,提问作者Sjaak
相关产品推荐
相关产品推荐

