在Maven尝试解决之前安装BOM

时间:2018-01-24 05:54:54

标签: maven maven-3 maven-plugin

有没有办法在maven尝试之前安装BOM作为maven调用的一部分 解决它。查看正常依赖的相关问题

Install local jar dependency as part of the lifecycle, before Maven attempts to resolve it

Is there are way to install maven dependencies before maven attempts to resolve them?

我试图在validate阶段运行一个插件,但是maven总是解决这个问题 首先,它是一个导入范围bom或用作父母bom。

关于BOM:http://www.baeldung.com/spring-maven-bom

1 个答案:

答案 0 :(得分:4)

maven BOM的预期用量位于dependencyManagement的{​​{1}}部分。

Maven文档声明:

其他希望使用该库的项目应将此pom导入其pom的dependencyManagement部分。(请参阅Introduction to the Dependency Mechanism

在多模块项目中,您通常只有父{0}的pom.xml部分。

另外,只是为了澄清:bom不会导致对其中指示的工件的依赖性。它只是表明"成分的版本和#34;如果在dependencyManagement适用的相关pom中的某处添加依赖项,则打算一起使用(对于由多个工件组成的依赖项一起使用)。

使用此类设置maven将在处理dependencyManagement部分时解决bom。这是评估周围dependencyManagement(或任何引用子模块)的时间。然后将bom添加到本地存储库,就像任何其他依赖项一样。

因此,在正常情况下,不需要从网络中获取bom并将其安装到本地存储库中。

现在,为什么在启动maven呼叫时无法使用bom工件

  1. 无法访问工件源(存储库)

    然后,下载工件并将其提供到本地存储库将是可行的方法。

  2. 之前不知道工件版本(或在开始时间决定,例如指定配置文件或将版本指示为运行时参数)

    然后maven的依赖机制仍然可以按预期工作。

  3. 之前不知道bom工件内容(工件列表或各个版本)(例如,因为它取决于构建运行期间某些构建步骤的结果)

    然后,您可能需要重新考虑构建过程,因为您似乎正在尝试将maven强制转换为不支持的内容。可能,"动态" part是项目的固有特性,因此,动态依赖实际上应该是(多模块)项目中的子模块。但如果没有针对特定用例的更多输入,建议真的很难。

  4. 虽然在构建步骤中要使用的特定工件可能会提供得很晚(依赖于对依赖项的延迟评估),但对于bom依赖项来说这将更加困难。因此,需要在第一次解决之前需要解析依赖关系管理实体,因为maven无法知道bom中包含哪些工件。

    如果实际存在一个绝对需要动态提供这种bom的用例,那么唯一的机会是两层进程,其中顶层提供bom而下层则使用它。请注意,这样的解决方案绝对需要两个独立的maven进程(因此,不仅仅是一个简单的多模块项目),以便在知道之前推迟pom.xml依赖关系的解析。