在使用spring的过程中,我们会用到spring的核心jar包,比如 spring-web,spring-aop,那么spring boot starter是如何引入上述jar包的呢?
【注】示例使用的版本,spring-boot-starter-parent (1.5.15.RELEASE),对应的spring mvc 版本为 4.3.18.RELEASE。
前提知识
1、为什么引入dependency可以不写 version?
若project A ->(继承自) project B,通过在project B中配置<dependencyManagement>
在project A 中,引入fastjson和commons-lang3的jar包时,即可以不指定版本。
<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency> </dependencies> </dependencyManagement>
2、maven 继承
project A ->(继承自) project B
若 project B 依赖某个jar,如下【注意dependencies不在 dependencyManagement内】,则 project A 继承 project B 的 fastjson包。
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> </dependencies>
3、<scope>import</scope>
当使用dependencyManagement时,若dependencyManagement的dependencies过多,会使得pom文件过长,这时我们把dependencyManagement内部的dependencies提取出来,形成一个pom,然后通过<scope>import</scope>引入,减少当前项目pom文件的长度。
正文
当我们创建一个spring-boot项目时,pom文件结构如下
与之对应的,pom继承关系,如下,
上图中,红色箭头代表继承,灰色箭头代表dependency依赖,pom文件用白底背景框,jar包用绿底框,目标jar包用红底框。
一、
在上图spring-boot-denpendencies的pom文件 的 <dependencyManagement>中,有如下依赖,该依赖<scope>import</scope>,实际上指向文件 spring-framework-bom-4.3.18.RELEASE.pom ,此文件提供spring mvc 4.3.18的所有 dependencyManagement。
二、
在spring-boot-denpendencies的pom文件中,依赖 spring-boot-starter-web (1.5.15.RELEASE),而【spring-boot-starter-web-1.5.15.RELEASE.jar】,内部只有一个pom文件,内容包含了spring-web,如下图,pom中未指定spring-web的版本,但是前面的步骤中我们已经在dependencyManagement中看到,版本是4.3.18.RELEASE。
完结。