Spec-Zone.ru › Kotlin 2

Поддержка вариантов плагина Gradle

В Gradle 7.0 появилась новая возможность для авторов плагинов Gradle — плагины с вариантами. Эта возможность упрощает добавление поддержки последних функций Gradle с сохранением совместимости с более старыми версиями Gradle. Подробнее о выборе вариантов в Gradle.

Благодаря вариантам плагинов Gradle команда Kotlin может выпускать разные варианты плагина Kotlin Gradle (KGP) для разных версий Gradle. Цель — поддерживать базовую компиляцию Kotlin в варианте main, который соответствует самым старым поддерживаемым версиям Gradle. Каждый вариант будет включать реализации функций Gradle, появившихся в соответствующем выпуске. Последний вариант будет поддерживать самый актуальный набор функций Gradle. Такой подход позволяет расширить поддержку старых версий Gradle, но с ограниченной функциональностью.

В настоящее время существуют следующие варианты плагина Kotlin Gradle:

Название варианта

Соответствующие версии Gradle

main

7.6.0–7.6.3

gradle80

8.0–8.0.2

gradle81

8.1.1

gradle82

8.2.1–8.4

gradle85

8.5

gradle86

8.6-8.7

gradle88

8.8-8.10

gradle811

8.11-8.12

gradle813

8.13-8.14

gradle96

9.6-9.7

В будущих выпусках Kotlin будут добавлены новые варианты.

Чтобы проверить, какой вариант используется при сборке, включите уровень журнала --info и найдите в выводе строку, начинающуюся с Using Kotlin Gradle plugin, например, Using Kotlin Gradle plugin main variant.

Решение проблем

Ниже приведены обходные решения некоторых известных проблем с выбором вариантов в Gradle:

  • ResolutionStrategy в pluginManagement не работает для плагинов с несколькими вариантами

  • Варианты плагина игнорируются, если плагин добавлен как buildSrc общая зависимость

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.

3 сентября 2026 г.
Проверка бинарной совместимости в плагине Kotlin GradleMaven

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API