在pom.xml文件中,我们发现有parent标签

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0</modelVersion>
    5. <parent>
    6. <groupId>org.springframework.boot</groupId>
    7. <artifactId>spring-boot-starter-parent</artifactId>
    8. <version>2.5.6</version>
    9. </parent>
    10. <groupId>com.example</groupId>
    11. <artifactId>springboot-01-quickstart</artifactId>
    12. <version>0.0.1-SNAPSHOT</version>
    13. <dependencies>
    14. <dependency>
    15. <groupId>org.springframework.boot</groupId>
    16. <artifactId>spring-boot-starter-web</artifactId>
    17. </dependency>
    18. <dependency>
    19. <groupId>org.springframework.boot</groupId>
    20. <artifactId>spring-boot-starter-test</artifactId>
    21. <scope>test</scope>
    22. </dependency>
    23. </dependencies>
    24. </project>

    按住Cmd点击parent标签中的spring-boot-starter-parent,可以跳转到它对应的pom.xml文件中。于是我们发现spring-boot-starter-parent的parent标签是spring-boot-dependencies。

    1. <parent>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-dependencies</artifactId>
    4. <version>2.5.6</version>
    5. </parent>

    我们再次按住Cmd点击spring-boot-dependencies,跳转到对应的pom.xml文件。

    1. <properties>
    2. <activemq.version>5.15.3</activemq.version>
    3. <antlr2.version>2.7.7</antlr2.version>
    4. <appengine-sdk.version>1.9.63</appengine-sdk.version>
    5. <artemis.version>2.4.0</artemis.version>
    6. <aspectj.version>1.8.13</aspectj.version>
    7. ... ... ...
    8. </properties>
    9. <dependencyManagement>
    10. <dependencies>
    11. <dependency>
    12. <groupId>org.springframework.boot</groupId>
    13. <artifactId>spring-boot</artifactId>
    14. <version>2.0.1.RELEASE</version>
    15. </dependency>
    16. ... ... ...
    17. </dependencies>
    18. </dependencyManagement>
    19. <build>
    20. <pluginManagement>
    21. <plugins>
    22. <plugin>
    23. <groupId>org.jetbrains.kotlin</groupId>
    24. <artifactId>kotlin-maven-plugin</artifactId>
    25. <version>${kotlin.version}</version>
    26. ... ... ...
    27. </plugins>
    28. </pluginManagement>
    29. </build>

    我们可以发现,一部分的坐标的版本(properties中每个坐标的版本)、依赖管理(dependencyManagement),插件管理(pluginManagement)都已经被定义好。所以当我们的SpringBoot工程继承了spring-boot-starter-parent后,当我们想要去用这些依赖时,就不用写版本了,因为SpringBoot已经给我们定义好了版本号,防止依赖之间发生冲突。

    小结:

    1. 开发SpringBoot程序要继承spring-boot-starter-parent
    2. spring-boot-starter-parent中定义了若干个依赖管理
    3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
    4. 继承parent的形式也可以采用引入依赖的形式实现效果