Convention plugins
Convention plugins (precompiled script plugins) — это Gradle-плагины, которые подключаются по короткому
имени и содержат переиспользуемую конфигурацию. Они — современная замена buildSrc.
Как устроены
В отдельном Gradle-проекте (build-logic) в директории src/main/kotlin лежат файлы
*.gradle.kts. Имя файла становится ID плагина.
build-logic/
├── build.gradle.kts # подключает `kotlin-dsl` plugin
├── settings.gradle.kts # импортирует version catalog из корня проекта
└── src/main/kotlin/
├── base-convention.gradle.kts
├── multiplatform-library-convention.gradle.kts
└── android-app-convention.gradle.kts
Пример плагина из boilerplate:
// build-logic/src/main/kotlin/multiplatform-library-convention.gradle.kts
plugins {
id("base-convention")
id("com.android.library")
id("android-base-convention")
id("org.jetbrains.kotlin.multiplatform")
}
kotlin {
androidTarget()
iosX64()
iosArm64()
iosSimulatorArm64()
sourceSets {
applyDefaultHierarchyTemplate()
}
}
Подключение в модуле:
// mpp-library/build.gradle.kts
plugins {
id("multiplatform-library-convention")
id("detekt-convention")
id("org.jetbrains.kotlin.native.cocoapods")
}
Как подключить build-logic к проекту
В settings.gradle.kts корня проекта:
includeBuild("build-logic")
А в build-logic/settings.gradle.kts — импорт version catalog из основного проекта:
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
Это позволяет convention plugins использовать те же версии зависимостей, что и весь проект.
Convention plugins vs buildSrc
Convention plugins решают главную проблему buildSrc: изменения в них не инвалидируют build cache основного проекта. Подробное сравнение — в разделе buildSrc.