【问题标题】:Installing BOM before Maven tries to resolves it在 Maven 尝试解决它之前安装 BOM
【发布时间】:2018-07-03 02:18:40
【问题描述】:

有没有办法在 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。

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

【问题讨论】:

  • BOM 以及使用它的项目是否是多模块项目中的子模块?
  • 不,BOM 是一个单独的工件,可以使用 maven-ant-plugin 从网络获取并安装在本地作为示例。
  • 您是否查看过扩展名:maven.apache.org/examples/maven-3-lifecycle-extensions.html?也许他们会提供您需要的灵活性。

标签: maven maven-3 maven-plugin


【解决方案1】:

maven BOM 的预期用法在pom.xmldependencyManagement 部分内。

Maven 文档说明:

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

在多模块项目中,您通常会有一个仅包含父 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 依赖项的解析推迟到已知为止。

【讨论】:

  • 感谢您花时间写这篇文章,但是我们并不生活在一个完美的世界中。最后,你变成了世界大矩阵中的一个小齿轮,对机器已经变成了什么以及它是如何工作的几乎没有控制权。我意识到并承认我没有使用最佳实践,但人们曾经并且将永远处于类似情况,因此我提出了相关问题。我们不能总是更换机器,但可以稍微改变自己以减少摩擦。齿轮磨损得越多,更换得越早。
猜你喜欢
  • 2011-08-22
  • 2018-12-05
  • 2018-05-13
  • 2019-09-08
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
相关资源
最近更新 更多