Maven中依赖管理配置的基础理解

一、继承方式(parent标签)

 

假设现在有父项目A、子项目B。

在子项目B的pom中声明<parent>标签,填入父项目A的坐标,那么子项目B可以继承父项目A中的:

  1、<dependencies>: 项目的依赖配置

  2、<dependencyManagement>: 项目的依赖管理配置

  3、<build>: <pluginManagement>、<plugins>等

  .......

其中需要注意的是

子项目B必定会继承父项目A下的<dependencies>,也就是说,不需要在子项目B的pom中去声明,即可继承父项目A<dependencies>中的所有;

而要想继承父项目A <dependencyManagement>下的依赖,则需要在子项目B中的依赖中声明依赖的groupId、artifactId(版本号version不需要);

<pluginManagement>、<plugins>类似于上面这两者的关系。

优点:可以继承父项目的大部分属性:dependencies、dependencyManagement等。

缺点:单继承

 

二、非继承方式

 

在项目中的<dependencyManagement>中可以导入其他pom。例如:

<dependencyManagement>
      <dependencies>
          <!--spring boot 2.2.2-->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-dependencies</artifactId>
              <version>2.2.2.RELEASE</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
    </dependencies>
</dependencyManagement>

<type>和<scope>固定。

优点:

  1、可以导入多个pom。

  2、可以替换导入pom中的组件版本。比如:spring-boot-dependencies的2.2.2.RELEASE中已有的mysql-connector-java版本是8.0.18,现在我需要的是:5.1.47,那么可以这样写,替换掉已有的8.0.18:

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
      </dependency>
    </dependencies>
</dependencyManagement>

 

缺点:只能引用所导入pom的<dependencyManagement/>中的依赖。例如:项目A的<dependencyManagement/>中导入了spring-boot-dependencies的pom,那么父项目A的子项目B只能引用spring-boot-dependencies中的<dependencyManagement/>部分,其他部分无法引用。

 

以上纯属个人见解,如有不对,感谢指出!共同进步。

 

posted @ 2021-02-04 17:51  风中的摇坠  阅读(157)  评论(0)    收藏  举报