maven - 在 Maven 尝试解决它之前安装 BOM

标签 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。

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

最佳答案

maven BOM 的预期用法在 dependencyManagementpom.xml 的部分.
Maven 文档指出:
希望使用该库的其他项目应将此 pom 导入其 pom 的 dependencyManagement 部分。 (请引用Introduction to the Dependency Mechanism)
在多模块项目中,您通常会有 dependencyManagement仅包含父 pom 的部分。
此外,只是为了澄清:bom 不会导致对其中指示的 Artifact 的依赖。它只是指示打算一起使用的“成分”的版本(对于由预期一起使用的多个 Artifact 组成的依赖项),以防在相关 pom 中的某处添加依赖项,例如 dependencyManagement适用于。
有了这样的设置,maven 将在处理时解析 bom dependencyManagement部分。这是评估周围 pom.xml 的时间(或任何引用子模块)。然后像任何其他依赖项一样将 bom 添加到本地存储库。
所以,一般情况下不需要“从网上获取bom并安装到本地存储库”。
现在,为什么在启动 maven 调用时没有可用的 bom Artifact ?

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

  • 虽然在构建步骤中使用的特定 Artifact 可能会延迟提供(通过依赖对依赖项的延迟评估),但对于 bom 依赖项,这将更加困难。因此,在第一次需要解析任何依赖项之前需要解析依赖项管理实体,因为 maven 无法知道 bom 中包含哪些 Artifact 。
    如果实际上有一个绝对需要动态提供此类 bom 的用例,那么唯一的机会是两层流程,其中顶层提供 bom,然后下层使用它。请注意,这样的解决方案绝对需要两个独立的 maven 进程(因此,不仅仅是一个简单的多模块项目)才能获得 depenceManagement 的分辨率。依赖延迟到已知为止。

    关于maven - 在 Maven 尝试解决它之前安装 BOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48415669/

    相关文章:

    java - Maven 返回编译失败 : package com. mashape.unirest.http 不存在

    git - 使用 scm-maven-plugin 时如何在 pom 中指定提交消息?

    maven - tomcat7-maven-plugin tomcatManager 状态码 :403, ReasonPhrase:Forbbiden

    eclipse - 如何在 Eclipse 中使用 Groovy 开发 Maven 插件

    spring - 如何在使用第三方 Web 服务时使用 PayloadLoggingInterceptor 和 SOAPLoggingInterceptor 拦截器

    svn - Maven SCM URL 相对于父级

    mysql - 从 liquibase-mave-plugin 运行 outPutChangeLogFile 会导致堆空间错误

    maven-2 - 解决maven依赖

    maven - tomcat7 :run fails where as tomcat7:run-war-only works

    gradle - 如何让 Buildship 识别 Eclipse Mars 中的现有项目