共计 1272 个字符,预计需要花费 4 分钟才能阅读完成。
深入探讨: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 继承。因而,如果您心愿从多个继承,咱们会在依赖项中传递凭据。
优先级
因而,有多种确定版本的办法,这意味着有一个优先程序。
- 在 POM 中间接申明中提供的版本具备最高优先级。
- 父 pom 中提供的版本具备第二优先权。
- 导入的 pom 版本排名第三
- 最初,咱们从依赖关系调解中失去的版本
如果在继承多个 pom 时发生冲突,则按程序更早申明的依赖项优先。
因而,当初您能够理解为什么在 Spring pom 中能够进行神奇的主动配置,BOM 是什么, 以及在须要进行指定版本的状况下该怎么做。
参考:
Maven Doc
Maven 根底