面试题49:简单介绍一下,SpringBoot如何管理项目中的依赖?

2023-05-09 21:45:02 浏览数 (2)

在之前我们做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个第三方包依赖,并且也维护好了对应的版本。那么,我们就可以非常方便的针对自己的需要,在其中做选择使用,而不用担心有版本冲突的问题了。

0 人点赞