Maven中的parent和dependencyManagement的区别是什么?代码举例讲解

Maven中parent和dependencyManagement的主要区别是:

parent:

  1. 用于从另一个pom继承配置信息,简化pom.xml。
  2. 会继承parent中的元素配置,例如、等。
  3. 不会继承元素,子项目需要显式声明依赖。

依赖例子:

parent pom:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
    </dependency>
  </dependencies>
</project> 

子项目pom:

<project>
  <parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
    </dependency>
  </dependencies>
</project>

子项目会继承parent的版本,但需要显式声明commons-lang依赖。

dependencyManagement:

  1. 用于管理依赖版本号,在元素内使用。
  2. 不会实际引入依赖,只是指定版本号。
  3. 子项目需要显式声明依赖以及依赖对应的groupId和artifactId。
  4. 如果子项目没有指定版本号,会使用dependencyManagement中指定的版本。

依赖例子:

parent pom:

<project>
  ...  
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>commons-lang</groupId> 
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>

子项目pom:

<project>
  <parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
    </dependency>
  </dependencies> 
</project>  

子项目会使用parent中dependencyManagement指定的2.6版本。

所以,总体来说:

  • parent用于继承常规配置,不控制依赖版本。
  • dependencyManagement专门用于管理依赖版本号,实现项目版本统一管理。

两者配合可以实现高效的pom配置继承和依赖版本控制。