У меня есть многомодульная сборка 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. Я хочу опубликовать спецификацию (BOM) из всех проектов компонентов, чтобы я мог перемещать компоненты в собственное репо.
Как настроить Gradle для публикации спецификации из набора подпроектов?




Gradle предоставляет специальный плагин для создания артефактов BOM (называемых платформами в мире Gradle).
Вы можете объявить их с помощью плагина java-платформы.
https://docs.gradle.org/current/userguide/java_platform_plugin.html
Вы можете создать дополнительный подпроект, который ссылается на все ваши проекты компонентов. Плагин maven-publish работает из коробки почти так же, как и с обычными java-проектами, и публикует BOM POM.
У меня нет под рукой примеров синтаксиса Kotlin, но в основном объявление выглядит примерно так же, как и с обычными зависимостями, но с дополнительным блоком ограничений:
plugins {
`java-platform`
}
dependencies {
constraints {
api project(":lib")
}
}