Поддержка вариантов плагинов 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("customConfiguraton") {
...
}
configurations.register("customConfiguraton") {
...
}
и хотите добавить зависимость от плагина Kotlin Gradle, например:
dependencies {
customConfiguration("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0")
}
dependencies {
customConfiguration 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.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 ':customConfiguraton'. > 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