背景: 今天在使用spring boot集成redis的时候,发现一个现象对于spring boot的其他pom依赖都可以不配置version版本号
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
但是可以获取到相应的版本jar包,这个是为什么?
开始的时候以为不配置版本号,就会从镜像仓库中获取最新的release版本,其实不是这样的。
是从父pom继承过来的。在spring boot的pom配置中会有以下配置:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
此配置表明父节点是spring-boot-starter-parent。进入父节点的pom发现,还有一个父pom ,spring-boot-dependencies
在此pom中配置了很多需要依赖的jar的pom,所以即使在项目的pom文件中不配置version信息也是可以的,它们会从spring-boot-dependencies中继承过来。
问题原因找到了,那么回归到spring boot的特性上来。
在spring boot的 13.2 Maven章节中有介绍到,spring boot是如何进行maven管理的。
文中有提到 Inheriting the starter parent,从starter parent处继承过来。还有如果不继承可以使用配置依赖管理的方式(使用scope=import的方式)。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
由此可以看出,pom之间的继承关系。根依赖就是 spring-boot-dependencies。
在项目的pom中有时候会出现这个属性配置:
<properties>
<java.version>1.8</java.version>
</properties>
因为 spring-boot-starter-parent中使用的是高稳定性和兼容性的jdk1.6,可以使用上述的配置完成1.8的配置。