Maven中parent和dependencyManagement的主要区别是:
parent:
- 用于从另一个pom继承配置信息,简化pom.xml。
- 会继承parent中的元素配置,例如、等。
- 不会继承元素,子项目需要显式声明依赖。
依赖例子:
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:
- 用于管理依赖版本号,在元素内使用。
- 不会实际引入依赖,只是指定版本号。
- 子项目需要显式声明依赖以及依赖对应的groupId和artifactId。
- 如果子项目没有指定版本号,会使用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配置继承和依赖版本控制。