当我没有在Maven的pom.xml中指定它时,版本会是什么?

时间:2012-09-07 09:50:20

标签: java maven version

最近我用maven编写了一个项目,但我对maven pom.xml中的版本有疑问。

如果我写这样的依赖

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
     <!--No version here-->
</dependency>

版本是什么

  1. 在一个简单的项目中,没有子项目

  2. 作为另一个项目的依赖项,该项目使用foo-bar-1.0.0

1 个答案:

答案 0 :(得分:35)

问题的第1部分:如果您没有指定版本,则会有各种不同的结果:

a)你会收到错误......

[ERROR]   The project org.example:myproject:0.5-SNAPSHOT (D:\src\myproject\pom.xml) has 1 error
[ERROR]     'dependencies.dependency.version' for foo:bar:jar is missing. @ line 39, column 14

b)如果您已在项目父级pom的依赖关系管理中定义了该版本,则会采用该版本。项目的父项不一定是封闭的超级项目。它可以只是一组适当的定义。

c)如果项目的另一个依赖项还依赖于foo:bar,并指定了一个版本,则会采用该版本。 Maven 2有一个名为transitive dependencies的机制。如果没有为工件显式指定依赖项的版本,它将搜索依赖关系树并使用树中的最近定义。如果有两个最接近的定义,则第一个声明获胜(因为maven 2.0.9)。

第2部分:我不确定,但也许传递依赖机制也可以这样工作。但是文件(据我所知)并没有提到这种情况。

但不知怎的,我觉得你问题的第二部分没有意义:我想,为了使用工件作为依赖,你必须先构建它。因此,在将依赖项本身用作依赖项之前,您必须知道它们的版本。