假设我有一个Maven父POM root
,它在依赖项管理中定义了foo:bar:1.0.0
。我有另一个父POM parent
,它使用root
作为父(只是在示例中添加了另一层)。最后,我有一个物料清单bom
,它使用root
作为其父级,但在其依赖项管理中重新定义了foo:bar:2.0.0
。
在我的项目app
中,我从parent
继承,然后在app
的依赖管理部分中import the BOM
root (foo:bar:1.0.0) <- parent <- app+bom
^
|
bom (foo:bar:2.0.0)
哪个依赖性管理部分胜出?我可以获得哪个版本的foo:bar
?
我知道,如果我直接将foo:bar
包括在app
的依赖项管理部分中,它将覆盖从父项继承的那个。但是,在依赖管理部分中导入 BOM是否等效于直接将其包含在依赖管理部分中,并且足以覆盖父对象?还是从父项的依赖项管理继承的foo:bar
优先?
答案 0 :(得分:1)
根据Maven优先级规则,根目录中的版本将获胜,因此您将获得foo:bar:1.0.0,您可以查看是否使用有效的POM。我认为这会使BOM表项目的效率降低,因为您不能使用它来覆盖父级的版本,而必须在应用程序或父级中声明版本。
优先级
因此,有多种确定版本的方法, 这意味着有一个优先顺序。
- POM中直接声明中提供的版本具有最高优先级。
- 父pom中提供的版本优先。
- 导入的pom版本排名第三
- 最后,无论我们从依赖关系调解中得到什么