在之前我们做Spring项目的时候,需要面对的就是引入大量的第三方包,而包和包之前的版本依赖,一直也是让我们非常头疼的问题之一。依赖越多越复杂,版本管理的问题就会愈加突显出来。
那么SpringBoot的诞生,基于Spring在它的上层为我们做好了默认的一整套依赖包的版本管理。也就是说,如果我们没有必须要指定某一版本的强性需求的话,只需要关注采用哪个依赖,而不必在意版本了。
下面我们就来介绍一下SpringBoot的依赖管理。当我们通过Spring Initializer创建好一个基于SpringBoot的脚手架项目时,我们发现,在pom.xml文件中,有一个<parent>的标签,如下所示:
代码语言:javascript复制<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
点击artifactId标签中的spring-boot-starter-parent,会跳转到spring-boot-starter-parent-2.5.1.pom,如下所示:
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.1</version>
</parent>
<artifactId>spring-boot-starter-parent</artifactId>
<packaging>pom</packaging>
<name>spring-boot-starter-parent</name>
... ...
在spring-boot-starter-parent的pom中,父类标签指定的是spring-boot-dependencies,我们再次点击跳转进去。
代码语言:javascript复制...
<properties>
<activemq.version>5.16.2</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.89</appengine-sdk.version>
<artemis.version>2.17.0</artemis.version>
<aspectj.version>1.9.6</aspectj.version>
<assertj.version>3.19.0</assertj.version>
...
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-amqp</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-blueprint</artifactId>
<version>${activemq.version}</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
<version>${activemq.version}</version>
</dependency>
...
</dependencies>
</dependencyManagement>
我们发现,在spring-boot-dependencies的pom中,管理了将近200个第三方包依赖,并且也维护好了对应的版本。那么,我们就可以非常方便的针对自己的需要,在其中做选择使用,而不用担心有版本冲突的问题了。