【问题标题】:Publish BOM (as pom.xml) using gradle plugin java-platform使用 gradle 插件 java-platform 发布 BOM(作为 pom.xml)
【发布时间】:2019-09-05 08:46:22
【问题描述】:

我正在设置一个项目特定的 BOM,它将“继承”其他 BOM 的定义(以 pom.xml 的形式提供)并定义自己的托管依赖项。

我在build.gradle.kts 中尝试了以下(如java-platform docs 中所述):

plugins {
  `java-platform`
  `maven-publish`
}

dependencies {

   constraints {
      api(platform("org.camunda.bpm:camunda-bom:${Versions.camunda}"))
   }
}

publishing {
   publications {
      create<MavenPublication>("camunda-bom") {
          from(components["javaPlatform"])
      }
   }
}

但是当我执行gradle publishToMavenLocal 并检查.m2/repositories 中生成的 pom.xml 时,它看起来像:

<dependencyManagement>
 <dependencies>
   <dependency>
     <groupId>org.camunda.bpm</groupId>
     <artifactId>camunda-bom</artifactId>
     <version>7.10.0</version>
     <scope>compile</scope>
   </dependency>
 </dependencies>

这不起作用,因为导入 pom 的语法应该是

  ...
  <type>pom</type>
  <scope>import</scope>
  ...

如何使用 gradle(使用版本 5.3.1)将有效的 BOM 发布为 pom.xml?

【问题讨论】:

    标签: gradle maven-bom


    【解决方案1】:

    您将 BOM 定义为 constraint,但这很可能不是您想要做的。 平台上的约束只会说,如果该依赖项进入图表elsewhere,它应该使用其中的platform 部分和来自约束的版本建议。

    如果您希望该 BOM 的约束对您平台的消费者可见,那么您需要通过执行以下操作将 BOM 添加为 platform dependency

    javaPlatform {
        allowDependencies()
    }
    dependencies {
        api(platform("org.camunda.bpm:camunda-bom:${Versions.camunda}"))
    }
    

    然后这将在 Maven 中作为内联 BOM 正确发布。

    【讨论】:

    • 非常感谢,解决方案和解释让我明白了。
    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2014-07-23
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多