Maven父POM与BOM依赖关系管理

时间:2019-05-30 16:53:37

标签: maven pom.xml dependency-management maven-bom

假设我有一个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优先?

1 个答案:

答案 0 :(得分:1)

根据Maven优先级规则,根目录中的版本将获胜,因此您将获得foo:bar:1.0.0,您可以查看是否使用有效的POM。我认为这会使BOM表项目的效率降低,因为您不能使用它来覆盖父级的版本,而必须在应用程序或父级中声明版本。

  

优先级

     

因此,有多种确定版本的方法,   这意味着有一个优先顺序。

     
      
  • POM中直接声明中提供的版本具有最高优先级。
  •   
  • 父pom中提供的版本优先。
  •   
  • 导入的pom版本排名第三
  •   
  • 最后,无论我们从依赖关系调解中得到什么
  •