在pom.xml文件中,我们发现有parent标签
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.6</version></parent><groupId>com.example</groupId><artifactId>springboot-01-quickstart</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>
按住Cmd点击parent标签中的spring-boot-starter-parent,可以跳转到它对应的pom.xml文件中。于是我们发现spring-boot-starter-parent的parent标签是spring-boot-dependencies。
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.5.6</version></parent>
我们再次按住Cmd点击spring-boot-dependencies,跳转到对应的pom.xml文件。
<properties><activemq.version>5.15.3</activemq.version><antlr2.version>2.7.7</antlr2.version><appengine-sdk.version>1.9.63</appengine-sdk.version><artemis.version>2.4.0</artemis.version><aspectj.version>1.8.13</aspectj.version>... ... ...</properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot</artifactId><version>2.0.1.RELEASE</version></dependency>... ... ...</dependencies></dependencyManagement><build><pluginManagement><plugins><plugin><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-maven-plugin</artifactId><version>${kotlin.version}</version>... ... ...</plugins></pluginManagement></build>
我们可以发现,一部分的坐标的版本(properties中每个坐标的版本)、依赖管理(dependencyManagement),插件管理(pluginManagement)都已经被定义好。所以当我们的SpringBoot工程继承了spring-boot-starter-parent后,当我们想要去用这些依赖时,就不用写版本了,因为SpringBoot已经给我们定义好了版本号,防止依赖之间发生冲突。
小结:
- 开发SpringBoot程序要继承spring-boot-starter-parent
- spring-boot-starter-parent中定义了若干个依赖管理
- 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
- 继承parent的形式也可以采用引入依赖的形式实现效果
