spring-boot-starter-parent 与 spring-boot-dependencies
Spring Boot 的每个发布版本都会规划它所支持的依赖项。实际上,你不用指定这些依赖项的版本号,因为 Spring Boot 都为你管理好了。当更新 Spring Boot 时,会相应的更新依赖。
Maven 管理依赖
Maven 用户可以继承 spring-boot-starter-parent 项目,来获取最佳依赖。这个父项目提供了以下几个功能:
- 默认 Java 1.6 编译
- UTF-8 编码格式
- 依赖管理部分,可让你对公共依赖省略 version 标签。继承自 spring-boot-dependencies POM。
- 良好的资源过滤
- 良好的插件配置
- 对于 application.properties 和 application.yml 包括 profile-specific 文件,良好的资源过滤
最后一点:因为默认配置文件接受 Spring 风格的占位符 (${}),Maven 过滤器换成了 @...@占位符。(可以通过 Maven 属性 resource.delimiter 替换)
继承 starter parent
配置继承 spring-boot-starter-parent:
1 <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>2.1.3.RELEASE</version> 5 <relativePath/> <!-- lookup parent from repository --> 6 </parent>
只需要在这里指定 Spring Boot 的版本号。如果导入其他的 starters,你可以完全省略版本号。
使用这个配置,你还可以通过 property 覆盖内部的依赖。例如,在 pom.xml 中升级 Spring Data release train。
1 <properties> 2 <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version> 3 </properties>
可以通过spring-boot-dependencies pom,查看支持的属性列表。
不使用 parent POM,配置 Spring Boot
可能有人不喜欢继承 spring-boot-starter-parent POM。你可能有自己的企业标准 parent,或者你可能只是比较喜欢明确声明所有的 Maven 配置。
如果你不想使用 spring-boot-starter-parent,你依然可以通过使用 scope=import 利用依赖管理的便利:
1 <dependencyManagement> 2 <dependencies> 3 <dependency> 4 <!-- Import dependency management from Spring Boot --> 5 <groupId>org.springframework.boot</groupId> 6 <artifactId>spring-boot-dependencies</artifactId> 7 <version>2.1.3.RELEASE</version> 8 <type>pom</type> 9 <scope>import</scope> 10 </dependency> 11 </dependencies> 12 </dependencyManagement>
这种方式不能使用 property 的形式覆盖原始的依赖项。要达到同样的效果,需要在 dependencyManagement 里面的 spring-boot-dependencies 之前添加依赖的东西。例如,要升级 Spring Data release train,pom.xml 应该是这样的:
1 <dependencyManagement> 2 <dependencies> 3 <!-- Override Spring Data release train provided by Spring Boot --> 4 <dependency> 5 <groupId>org.springframework.data</groupId> 6 <artifactId>spring-data-releasetrain</artifactId> 7 <version>Fowler-SR2</version> 8 <scope>import</scope> 9 <type>pom</type> 10 </dependency> 11 <dependency> 12 <groupId>org.springframework.boot</groupId> 13 <artifactId>spring-boot-dependencies</artifactId> 14 <version>2.1.3.RELEASE</version> 15 <type>pom</type> 16 <scope>import</scope> 17 </dependency> 18 </dependencies> 19 </dependencyManagement>