Spec-Zone.ru › Kotlin 1.8

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

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

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

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

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

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

main

6.8.3–6.9.3

gradle70

7.0

gradle71

7.1-7.4

gradle75

7.5

gradle76

7.6 и выше

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

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

Устранение неполадок

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

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

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

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.

Последнее изменение: 10 января 2023 г.
Компиляция и кэши в плагине Kotlin Gradle Maven

© 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

Spec-Zone.ru

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