第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 有一种称为传递依赖关系的机制。如果未为项目显式指定依赖项的版本,它将搜索依赖项树并使用树中最近的定义。如果有两个最接近的定义,则第一个声明获胜(自 maven 2.0.9 起)。
第2部分:我不确定,但也许传递依赖机制也以这种方式工作。但是文档(据我所知)没有提到这种情况。
但不知何故,我觉得你问题的第二部分没有意义:我想为了使用工件作为依赖项,你必须首先构建它。因此,在将依赖项本身用作依赖项之前,您必须知道依赖项的版本。