SpringBoot从零开始学(视频教学版)
上QQ阅读APP看书,第一时间看更新

2.1.3 再说依赖管理

在1.3.1节我们就提到过依赖管理,并且引入了spring-boot-starter-web依赖。可以注意到,引入Web Starter的时候只提供了groupId和artifactId,没有提供必要的Version,这是因为Spring Boot为我们管理Web Starter的版本信息。

依赖的版本信息是在artifactId为spring-boot-dependencies的这一项目中管理的,它是spring-boot-starter-parent的父项目,而spring-boot-starter-parent又定义为我们的项目的父项目。对于spring-boot-starter-parent和spring-boot-dependencies,若是在Maven中,它们的packaging定义为“pom”,就是只有POM文件,没有代码。因为不是JAR包,所有不会在IDEA的External Libraries中找到。

我们可以在本地仓库中找到spring-boot-dependencies的POM文件(或者在IDEA中通过Ctrl+鼠标左键的方式打开),能够看到其中的内容主要集中在3个标签内,分别是properties、dependencyManagement和pluginManagement,如图2.1所示。

图2.1 spring-boot-dependencies的POM文件

(1)在properties中定义了非Spring Boot的JAR包的版本号,作为常量在dependencyManagement和pluginManagement中使用。properties中定义的一部分如图2.2所示,其命名格式都是“技术名称.version”。

图2.2 properties标签下的内容

(2)在dependencyManagement中定义了Spring官方框架的依赖,以及使用这些框架所必需的相应技术的依赖。dependencyManagement与dependencies不同,只在前者中定义不会在项目中生效,只有在项目的dependencies中定义后才会生效。以aspect相关的依赖为例,如图2.3所示,在version标签中,以“${aspectj.version}”对properties中定义的版本号进行引用。将版本号放到properties中定义的好处是其多次使用只需在一个位置定义,因此,我们需要修改版本号时,只需在项目中定义名称为aspectj.version即可。

另外,Spring Boot提供的JAR包的版本号是在dependencyManagement中定义的,如图2.4所示。这些版本都与spring-boot-starter-parent的版本保持一致。

图2.3 使用aspectj.version属性的依赖

图2.4 Spring Boot的JAR包版本指定

(3)pluginManagement的功能与dependencyManagement类似,其中定义的插件不会直接生效,只有当在项目中定义插件后才会生效,pluginManagement只是起到了版本管理的功能。