项目想引入SpringBoot框架,我们可以通过继承spring-boot-starter-parent
来实现。如下:
xml
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
但有时候项目可能需要有公司标准的父项目需要继承,这样我们就没办法使用上面的方式来引入SpringBoot了。不过,我们可以通过下面的方式来引入SpringBoot:
xml
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
为什么通过第二种方式能够实现同样的目的?
那我们先看第一种通过继承的方式引入SpringBoot做了什么?
<parent>
标签的作用是使一个项目继承父项目中pom的所有配置。
然后我们点开spring-boot-starter-parent
父项目的pom看到所有的依赖都在<dependencyManagement>
中声明,并且没有在dependencies
中声明依赖。
就是说我们的项目继承了父项目pring-boot-starter-parent
的<dependencyManagement>
标签的所有配置依赖。
第二种配置方式做了什么?
import
This scope is only supported on a dependency of type
pom
in the<dependencyManagement>
section. It indicates the dependency is to be replaced with the effective list of dependencies in the specified POM's<dependencyManagement>
section. Since they are replaced, dependencies with a scope ofimport
do not actually participate in limiting the transitivity of a dependency.
上面为maven官方文档对于import作用域的描述。意思是:import
仅支持在<dependencyManagement>
的<dependency>
中使用。这表示这个依赖会被替换成这个依赖的<dependencyManagement>
中配置的依赖。
简单的说就是,当我们使用第二种配置方式来引入SpringBoot,那么会将spring-boot-starter-parent
依赖的pom文件的<dependencyManagement>
标签内配置的依赖全部替换到当前项目的<dependencyManagement>
中。
这样,我们发现第一种方式和第二种方式实现的效果是一样的。