深入探讨:Maven中的物料清单

2019年6月4日 阿尤什·普拉沙(Ayush Prashar)Java,项目管理资料清单,依赖治理,Maven,Maven插件

浏览工夫: 3 分钟

最近,在应用Spring WebFlux时,我遇到了一个十分有用的物料清单概念,也称为BOM表( bill of materials),这个概念实际上并不仅限于Spring。BOM 是 Spring 帮忙咱们遗记与传递依赖项无关的问题,把注意力放到关注我的项目需要的几种办法之一。

因而,当咱们通常创立一个具备数十个或数百个依赖项的大型项目时,很大可能应用传递性依赖项是在我的项目外部应用的通用项。因而,假如咱们有一个称为 “common-3.0.0.RELEASE” 的依赖项,它由日志记录的工件应用,而测试框架应用的 “common-2.9.0.Release”这个版本。在这种状况下就会有抵触。咱们须要确保取得可用的版本,以便两个工件能够协同工作。

Maven 有一种为咱们解决这个问题的办法。它应用依赖关系调解(dependency mediation)的概念。它用一个被称为依赖项的门路的概念。领有最短我的项目门路的包将被其余包选中。假如在咱们的例子中,依赖链相似于 log4j -> commons-2.9.0.Release 和 JUnit -> unit-tests -> common.3.0.0., Maven 抉择commons 2.9,因为它的依赖门路间隔以后 POM 更短。

然而,当咱们能够搞对时,为什么要依附某种内部办法呢?通过在 POM 中指定它,咱们始终能够应用咱们心愿的甚至能够过渡的版本。当然,但这会使咱们的 POM 凌乱,因为咱们要写入的可能会很多。 咱们能够让依赖治理(dependency management )来管制,兴许是一个更好的方法。

物料清单

Maven 让咱们在独自的 pom 中定义依赖项或传递性依赖项的版本。在此 pom 中,咱们申明了依赖项的版本和范畴。因而,咱们能够集中探讨所有依赖项细节。

让咱们创立一个示例物料清单 pom 文件。

能够看出,物料清单是一个齐全失常的 POM 文件,咱们能够在其中蕴含依赖项信息。

如何应用它?

当初咱们理解到,BOM是一个文件,其中蕴含无关咱们我的项目的任何依赖项版本的所有信息。下一步是将此文件蕴含在咱们的原始POM中。

一种做到这一点的形式就是Spring的形式,就像父我的项目一样继承它。咱们须要做的就是在父标记中提供父信息。

只管这是 Spring 的工作形式,但咱们不能从多个父pom继承。因而,如果您心愿从多个继承,咱们会在依赖项中传递凭据。

优先级

因而,有多种确定版本的办法,这意味着有一个优先程序。

  1. 在POM中间接申明中提供的版本具备最高优先级。
  2. 父pom中提供的版本具备第二优先权。
  3. 导入的pom版本排名第三
  4. 最初,咱们从依赖关系调解中失去的版本

如果在继承多个 pom 时发生冲突,则按程序更早申明的依赖项优先。

因而,当初您能够理解为什么在Spring pom中能够进行神奇的主动配置,BOM是什么, 以及在须要进行指定版本的状况下该怎么做。

参考:

Maven Doc

Maven根底