在我的父pom中,我定义了一个依赖管理条目,它包含一个google guava神器
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>
</dependencies>
</dependencyManagement>
在
child pom
中,有3种情况,我想问每种情况孩子使用哪个版本。
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.2-jre</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.4-jre</version>
</dependency>
</dependencies>
您可以通过为项目生成有效的 pom.xml 来验证这一点。 Maven 的依赖调解使用依赖的“最近定义”。
情况 1:此处仅指定组和工件 ID。因此,Maven 从 dependencyManagement 部分中最近的定义中选择依赖项版本。
情况2和3:版本是否高于/低于指定版本。其他地方对于 Maven 来说没有任何意义。组、工件 ID 和版本均在依赖项部分本身中指定。因此,将使用此版本,而不是 dependencyManagement 部分中指定的版本。