Поддержка вариантов плагинов Gradle
Gradle 7.0 представил новую возможность для авторов плагинов Gradle — плагины с вариантами. Эта функция упрощает добавление поддержки последних возможностей Gradle, сохраняя совместимость со старыми версиями Gradle. Узнайте больше о выборе вариантов в Gradle.
Благодаря вариантам плагинов Gradle, команда Kotlin может предоставлять различные варианты плагина Kotlin Gradle (KGP) для разных версий Gradle. Цель — поддерживать базовый Kotlin-компилятор в варианте main , который соответствует самым старым поддерживаемым версиям Gradle. Каждый вариант будет иметь реализации функций Gradle из соответствующего релиза. Последний вариант будет поддерживать последний набор функций Gradle. С помощью этого подхода можно расширить поддержку старых версий Gradle с ограниченной функциональностью.
В настоящее время существуют следующие варианты плагина Kotlin Gradle:
Название варианта |
Соответствующие версии Gradle |
|---|---|
|
6.8.3–6.9.3 |
|
7.0 |
|
7.1-7.4 |
|
7.5 |
|
7.6 и выше |
В будущих релизах 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:1.9.0")
}
dependencies {
customConfiguration 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0'
}
Вам необходимо добавить следующие атрибуты в ваш 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–2023 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