最近,我用maven编写了一个项目,但是我对maven pom.xml中的版本有疑问。
如果我写这样的依赖
<dependency> <groupId>foo</groupId> <artifactId>bar</artifactId> <!--No version here--> </dependency>
版本是什么
在一个简单的项目中,没有子项目
作为另一个项目的依赖项,并且该项目使用foo-bar-1.0.0
问题的第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
[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具有一种称为传递依赖的机制。如果没有为工件显式指定依赖项的版本,它将搜索依赖关系树并使用树中 最接近的定义 。如果有两个最接近的定义,则第一个声明将获胜(自maven 2.0.9起)。
第2部分:我不确定,但是传递依赖机制也可以那样工作。但是文档(据我了解)没有提到这种情况。
但是某种程度上我觉得问题的第二部分没有意义:我想为了将工件用作依赖项,您必须先构建它。因此,您必须先了解依赖项的版本,然后再将其用作依赖项本身。