继承spring-boot-starter-parent时如何无需指定spring-boot-configuration-processor版本
解决方案
问题根因
Maven设计中,maven-compiler-plugin的annotationProcessorPaths配置节点内的依赖,不会自动继承项目父依赖(包括spring-boot-starter-parent)中dependencyManagement托管的版本,因此直接省略版本号会触发版本为空的报错。
可选方案
- 方案一:直接声明为项目依赖(最简便)
你不需要在maven-compiler-plugin中单独配置注解处理器路径,只需要在子模块的dependencies节点下添加该依赖,指定scope为provided即可自动继承父依赖托管的版本:
<dependencies> <!-- 你的其他业务依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <scope>provided</scope> </dependency> </dependencies>
provided scope可以保证该依赖不会被打包到最终产物中,和单独配置注解处理器路径的效果完全一致。
- 方案二:复用Spring Boot内置版本属性
如果你必须在annotationProcessorPaths中配置该依赖(比如需要同时配置多个注解处理器、需要调整处理器顺序),可以直接使用spring-boot-starter-parent内置的${spring-boot.version}属性作为版本号,不需要硬编码版本:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>${spring-boot.version}</version> </path> <!-- 其他注解处理器配置 --> </annotationProcessorPaths> </configuration> </plugin>
该属性是Spring Boot父依赖统一管理的全局版本号,升级Spring Boot版本时会自动同步,不需要手动维护。
- 方案三:根pom统一声明版本(多模块项目推荐)
如果有多个子模块都需要用到该注解处理器,可以在根pom的dependencyManagement节点中统一声明,所有子模块引用时都可以省略版本号:
<!-- 根pom.xml的dependencyManagement节点 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>${spring-boot.version}</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement>
内容的提问来源于stack exchange,提问作者Fractal Lotus
相关产品推荐
相关产品推荐

