Поддержка вариантов плагина Gradle
В Gradle 7.0 появилась новая возможность для авторов плагинов Gradle — плагины с вариантами. Эта возможность упрощает добавление поддержки последних функций Gradle с сохранением совместимости с более старыми версиями Gradle. Подробнее о выборе вариантов в Gradle.
Благодаря вариантам плагинов Gradle команда Kotlin может выпускать разные варианты плагина Kotlin Gradle (KGP) для разных версий Gradle. Цель — поддерживать базовую компиляцию Kotlin в варианте main, который соответствует самым старым поддерживаемым версиям Gradle. Каждый вариант будет включать реализации функций Gradle, появившихся в соответствующем выпуске. Последний вариант будет поддерживать самый актуальный набор функций Gradle. Такой подход позволяет расширить поддержку старых версий Gradle, но с ограниченной функциональностью.
В настоящее время существуют следующие варианты плагина Kotlin Gradle:
Название варианта |
Соответствующие версии Gradle |
|---|---|
|
7.6.0–7.6.3 |
|
8.0–8.0.2 |
|
8.1.1 |
|
8.2.1–8.4 |
|
8.5 |
|
8.6-8.7 |
|
8.8-8.10 |
|
8.11-8.12 |
|
8.13-8.14 |
|
9.6-9.7 |
В будущих выпусках Kotlin будут добавлены новые варианты.
Чтобы проверить, какой вариант используется при сборке, включите уровень журнала --info и найдите в выводе строку, начинающуюся с Using Kotlin Gradle plugin, например, Using Kotlin Gradle plugin main variant.
Решение проблем
Gradle не может выбрать вариант KGP в пользовательской конфигурации
Ситуация, когда Gradle не может выбрать вариант KGP в пользовательской конфигурации, является ожидаемой. Если вы используете пользовательскую конфигурацию Gradle:
configurations.register("customConfiguration") {
// ...
}
configurations.register("customConfiguration") {
// ...
}
И хотите добавить зависимость от плагина Kotlin Gradle, например:
dependencies {
customConfiguration("org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.20")
}
dependencies {
customConfiguration 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.20'
}
Вам нужно добавить следующие атрибуты в customConfiguration:
configurations {
customConfiguration {
attributes {
attribute(
Usage.USAGE_ATTRIBUTE,
project.objects.named(Usage.class, Usage.JAVA_RUNTIME)
)
attribute(
Category.CATEGORY_ATTRIBUTE,
project.objects.named(Category.class, Category.LIBRARY)
)
// If you want to depend on a specific KGP variant:
attribute(
GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE,
project.objects.named("7.0")
)
}
}
}
configurations {
customConfiguration {
attributes {
attribute(
Usage.USAGE_ATTRIBUTE,
project.objects.named(Usage, Usage.JAVA_RUNTIME)
)
attribute(
Category.CATEGORY_ATTRIBUTE,
project.objects.named(Category, Category.LIBRARY)
)
// If you want to depend on a specific KGP variant:
attribute(
GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE,
project.objects.named('7.0')
)
}
}
}
В противном случае вы получите ошибку, похожую на эту:
> Could not resolve all files for configuration ':customConfiguration'.
> Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0.
Required by:
project :
> Cannot choose between the following variants of org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0:
- gradle70RuntimeElements
- runtimeElements
All of them match the consumer attributes:
- Variant 'gradle70RuntimeElements' capability org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0:
- Unmatched attributes:
Что дальше?
Подробнее о основах и особенностях Gradle.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/gradle-plugin-variants.html