首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Maven尝试解析BOM之前安装BOM

在Maven尝试解析BOM之前安装BOM
EN

Stack Overflow用户
提问于 2018-01-24 05:54:53
回答 1查看 1.1K关注 0票数 10

在maven试图解决BOM之前,是否有方法安装BOM作为maven调用的一部分。有关正常依赖关系的相关问题,请参阅

在Maven尝试解决它之前,将本地jar依赖项安装为生命周期的一部分

在maven试图解决这些依赖之前,是否有方法安装maven依赖项?

我试图在validate阶段运行一个插件,但是maven总是先解析bom,不管它是导入作用域bom还是用作父bom。

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

EN

回答 1

Stack Overflow用户

发布于 2018-02-04 15:10:25

maven BOM的预期使用在dependencyManagement部分的pom.xml中。

Maven文档声明:

其他希望使用库的项目应该将这个pom导入到它们的pom的dependencyManagement部分。(请参阅依赖机制简介)

在一个多模块项目中,通常只有一个带有父pom的dependencyManagement部分。

另外,为了澄清起见: bom并不会导致对其中指明的工件的依赖。它只是指明了打算一起使用的“成分”的版本(对于由预期将一起使用的几个构件组成的依赖项),以便在相关的pom中添加依赖项(例如dependencyManagement应用到的某个地方)。

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

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

现在,为什么在启动maven调用时bom工件不可用?

  1. 无法访问工件源(存储库)。 然后,下载工件并将其提供到本地存储库。
  2. 工件版本以前不知道(或在开始时决定,例如指定概要文件或将版本指定为运行时参数) 那么,maven的依赖机制仍然可以正常工作。
  3. 以前不知道bom工件内容(工件列表或相应版本)(例如,它取决于构建运行期间某个构建步骤的结果)。 然后,您可能需要重新考虑您的构建过程,因为看起来您正在试图将maven强制到它不支持的东西中。很可能,“动态”部分是项目的固有部分,因此,动态依赖关系实际上应该是您(多模块)项目中的子模块。但是,如果没有对特定用例的更多输入,就很难提供建议。

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

如果实际上有一个应用程序绝对需要动态地提供这样的bom,那么唯一的机会是一个两层进程,其中顶层提供bom,下层则使用它。请注意,这样的解决方案绝对需要两个独立的maven进程(所以,不仅仅是一个简单的多模块项目),以便将depenceManagement依赖的解决推迟到已知。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48415669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档