当我在同一个pom文件中声明两个不同的版本时,哪种maven依赖性占上风?

时间:2013-09-07 13:53:54

标签: java spring hibernate maven

这是我偶然发现的一个真实例子。 我有以下声明的spring-context工件(spring.version是3.2.4.RELEASE):

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${spring.version}</version>
</dependency>

如果您检查此页面http://www.mvnrepository.com/artifact/org.springframework/spring-context/3.2.4.RELEASE,您将在段落中看到(此工件取决于...)使用上述声明时导入的所有依赖项。 其中一个是hibernate-validator(4.3.0.FINAL)。

稍后,我决定在我的pom.xml文件中使用另一个版本的hibernate-validator(例如因为它更新)并且我声明了以下代码:

<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-validator</artifactId>
     <version>4.3.1.Final</version>
</dependency>

现在看来我的项目正在导入两个不同版本的hibernate-validator。 项目正在使用哪一个? 谢谢。

2 个答案:

答案 0 :(得分:6)

神奇的单词是distance:使用最靠近项目的单词。因此,如果您在项目pom中定义它,则使用该项目。您还可以查看具有多个目标的maven-dependency-plugin,这些目标可以向您显示以不同方式使用的版本。

答案 1 :(得分:2)

我发现这对查看我使用的依赖项非常有用: http://maven.apache.org/plugins/maven-dependency-plugin/examples/filtering-the-dependency-tree.html

基本上在cmd上输入:

mvn dependency:tree

它将显示项目的所有依赖项。

类型

mvn dependency:tree -Dincludes=velocity:velocity

它只显示速度的依赖树。 (输入的模式是groupId:artifactId)。