如何从 gradle 个子项目中发布 BOM?

How to pbulish a BOM out of gradle subprojects?

我有一个多模块 gradle 构建,其中包含一组可重用组件项目和一组使用通用组件的应用程序。

.
├── build.gradle.kts
├── components
│   ├── blob
│   ├── clock
│   ├── database
│   ├── email
│   ├── json
│   └── web
├── gradle.properties
├── platform
│   ├── build.gradle.kts
│   └── settings.gradle.kts
├── settings.gradle.kts
└── app
    ├── api
    └── ui

上面示例树结构中app:api项目可以使用components:clock项目。我想从所有组件项目中发布 Material (BOM) 的清单,以便我可以将组件移动到它自己的仓库中。

如何配置 gradle 从子项目集合中发布 BOM?

Gradle 提供了一个特殊的插件来生成 BOM 工件(在 Gradle 世界中称为 Platforms)

您可以使用 java-platform 插件声明它们。

https://docs.gradle.org/current/userguide/java_platform_plugin.html

您可以创建一个额外的子项目来引用您的所有组件项目。 maven-publish 插件开箱即用,与常规 java 项目几乎相同,并将发布 BOM POM。

我手边没有任何 Kotlin 语法示例,但基本上声明看起来与常规依赖项几乎相同,但有一个额外的约束块:

plugins {
    `java-platform`
}

dependencies {
    constraints {
        api project(":lib")
    }
}