Kotlin gradle plugin version

Support for Gradle plugin variants

Gradle 7.0 introduced a new feature for Gradle plugin authors — plugins with variants. This feature makes it easier to add support for latest Gradle features while maintaining compatibility with older Gradle versions. Learn more about variant selection in Gradle.

With Gradle plugin variants, the Kotlin team can ship different Kotlin Gradle plugin (KGP) variants for different Gradle versions. The goal is to support the base Kotlin compilation in the main variant, which corresponds to the oldest supported versions of Gradle. Each variant will have implementations for Gradle features from a corresponding release. The latest variant will support the latest Gradle feature set. With this approach, it is possible to extend support for older Gradle versions with limited functionality.

Currently, there are the following variants of the Kotlin Gradle plugin:

Corresponding Gradle versions

In future Kotlin releases, more variants will probably be added.

To check which variant your build uses, enable the —info log level and find a string in the output starting with Using Kotlin Gradle plugin , for example, Using Kotlin Gradle plugin main variant .

Читайте также:  Python x www form urlencoded request

Troubleshooting

Here are workarounds for some known issues with variant selection in Gradle:

Gradle can’t select a KGP variant in a custom configuration

This is an expected situation that Gradle can’t select a KGP variant in a custom configuration. If you use a custom Gradle configuration:

And want to add a dependency on the Kotlin Gradle plugin, for example:

You need to add the following attributes to your customConfiguration :

Otherwise, you will receive an error similar to this:

> 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

Для сборки с помощью Gradle необходимо настроить kotlin-gradle плагин, применить его к своему проекту и добавить kotlin-stdlib зависимость. Эти действия могут быть сделаны автоматически с помощью IntelliJ IDEA во вкладке Tools | Kotlin | Configure Kotlin.

Плагин и версии

kotlin-gradle-plugin создает Kotlin ресурсы и модули.

Версия Kotlin обычно указывается в kotlin_version свойстве:

buildscript < ext.kotlin_version = '>' repositories < mavenCentral() >dependencies < classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" >> 

Это не требуется когда версия Kotlin Gradle плагина 1.1.1 и выше с Gradle plugins DSL.

Поддержка JVM

Чтобы настроить JVM необходимо использовать плагин Kotlin:

Начиная с Kotlin 1.1.1 плагин может быть применен автоматически с использованием Gradle plugins DSL:

version должен быть в данном блоке(как на примере), и не может быть использован из других скриптов сборки.

Kotlin ресурсы могут сочетаться с Java ресурсами из одной папки или разных папок. По умолчанию используются разные папки:

project - src - main (root) - kotlin - java 

Соответствующее свойство sourceSets должно быть обновлено, если не использовано значение по умолчанию:

Поддержка JavaScript

Для использования JavaScript должен применяться другой плагин:

Данный плагин работает только для Kotlin файлов, таким образом рекомендуется хранить Kotlin и Java файлы раздельно (Это в случае если данный проект содержит Java файлы). Как и с поддержкой JVM, если не используются значения по умолчанию, необходимо определить папки ресурсов в sourceSets:

В дополнение к выходному файлу JavaScript плагин по умолчанию создает дополнительный JS-файл с двоичными дескрипторами. Эти файлы требуются в случае создании библиотеки, чтобы Kotlin модули могли наследоваться от нее, и должны распространяться вместе с библиотекой.

Процесс контролируется kotlinOptions.metaInfo свойством:

Поддержка Android

Android’s Gradle модель отличается от обычной Gradle модели, поэтому если необходимо собрать Android проект использующий Kotlin, необходимо применить kotlin-android плагин вместо kotlin:

buildscript < ext.kotlin_version = '>' . dependencies < classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" >> apply plugin: 'com.android.application' apply plugin: 'kotlin-android' 

Android Studio

При использовании Android Studio, необходимо добавить следующее под блоком android:

Это позволит Android Studio находить kotlin директорию в папке с ресурсами поэтому когда проект будет загружен в IDE, он будет правильно распознан. Другой способ — это добавить Kotlin классы в Java директорию, расположенную по пути src/main/java .

Настройка зависимостей

В дополнение к зависимостям kotlin-gradle-plugin , показанным выше, вам нужно добавить зависимость от стандартной библиотеки Kotlin:

repositories < mavenCentral() >dependencies

Для поддержки JavaScript используйте compile «org.jetbrains.kotlin:kotlin-stdlib-js» .

Если вы собираетесь включить поддержку JDK 7 или JDK 8, вы можете использовать расширенную версию Kotlin standard library, которая содержит расширенный API, добавленный в новой JDK версии. Вместо kotlin-stdlib , используйте одну из следующих зависимостей:

compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7" compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" 

В Kotlin 1.1.x, используйте kotlin-stdlib-jre7 вместо kotlin-stdlib-jre8 .

Если проект содержит Kotlin reflection или средства тестирования, вам также необходимо добавить соответствующие зависимости:

compile "org.jetbrains.kotlin:kotlin-reflect" testCompile "org.jetbrains.kotlin:kotlin-test" testCompile "org.jetbrains.kotlin:kotlin-test-junit" 

Начиная с Kotlin 1.1.2 зависимости из группы org.jetbrains.kotlin по умолчанию разрешены. Вы можете указать версию вручную, используя полную зависимость, например compile «org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version» .

Аннотации

Пошаговая компиляция

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

Начиная с Kotlin 1.1.1 пошаговая компиляция доступна по умолчанию.

Существует несколько способов переопределить настройку по умолчанию:

  1. Добавить kotlin.incremental=true или kotlin.incremental=false либо в gradle.properties , либо в local.properties файл;
  2. Добавить -Pkotlin.incremental=true или -Pkotlin.incremental=false как параметр командной строки. Обратите внимание, что в этом случае параметр должен быть добавлен к каждой последующей сборке, а любая сборка с отключенной пошаговой компиляцией делает недействительными пошаговые кеши.

Когда пошаговая компиляция включена, в журнале сборки должно появиться следующее сообщение:

Using kotlin incremental compilation 

Обратите внимание, что первая сборка не будет пошаговой.

Поддержка Coroutines(сопрограммы)

Coroutines добавлены как экспериментальная функция в Kotlin 1.2, поэтому компилятор Kotlin сообщает об использовании сопрограмм в вашем проекте. Чтобы отключить предупреждение, добавьте следующий блок в свой файл build.gradle :

Названия модулей

Модули Kotlin, создаваемые сборкой, называются соответственно свойству «archivesBaseName» в проекте. Если проект имеет широкое имя, например lib или jvm , что является общим для подпроектов, выходные файлы Kotlin, относящиеся к модулю ( * .kotlin_module ), могут столкнуться с модулями из сторонних модулей с тем же именем, это вызывает проблемы, когда проект упаковывается в один архив (например, APK).

Чтобы этого избежать, рассмотрите возможность установки уникального archivesBaseName вручную:

archivesBaseName = 'myExampleProject_lib' 

Поддержка кеша Gradle Build Cache (начиная с версии 1.2.20)

Kotlin плагин поддерживает Gradle Build Cache (Требуется версия 4.3 и выше; кеширование отключено в более низких версиях).

Задачи обработки аннотаций Kapt не кэшируются по умолчанию, поскольку обработчики аннотаций запускают произвольный код, который необязательно преобразовывает входящие задачи в выходящие и может обращаться к файлам, не отслеживаемых Gradle, и изменять их. Чтобы включить кэширование для kapt в любом случае, добавьте следующие строки в сценарий сборки:

Чтобы отключить кеширование для всех задач Kotlin, установите для параметра системного свойства kotlin.caching.enabled значение false (запустите сборку с аргументом -Dkotlin.caching.enabled=false ).

Опции компилятора

Kotlin` pattern. The names of the tasks in Android Projects contain the [build variant](https://developer.android.com/studio/build/build-variants.html) names and follow the pattern `compile Kotlin`, for example, `compileDebugKotlin`, `compileReleaseUnitTestKotlin`. When targeting JavaScript, the tasks are called `compileKotlin2Js` and `compileTestKotlin2Js` respectively, and `compile Kotlin2Js` for custom source sets. To configure a single task, use its name. Examples: «` groovy compileKotlin < kotlinOptions.suppressWarnings = true >compileKotlin < kotlinOptions < suppressWarnings = true >> «` It is also possible to configure all Kotlin compilation tasks in the project: «` groovy tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all < kotlinOptions < // . >> «` A complete list of options for the Gradle tasks follows: —>

Чтобы указать дополнительные параметры компиляции, используйте свойство kotlinOptions .

При поддержке JVM опции называются compileKotlin для релизного кода и compileTestKotlin для тестового кода. Задачи для настраиваемых исходных ресурсов вызываются по шаблону compile Kotlin .

Имена задач в проектах Android содержат build variant и следуют шаблону compile Kotlin , например, compileDebugKotlin , compileReleaseUnitTestKotlin .

При поддержке JavaScript задачи называются compileKotlin2Js и compileTestKotlin2Js соответственно, и compile Kotlin2Js для настраиваемых ресурсов.

Чтобы настроить задачу, используйте ее имя. Примеры:

compileKotlin < kotlinOptions.suppressWarnings = true >compileKotlin < kotlinOptions < suppressWarnings = true >> 

Также возможно сконфигурировать все задачи компиляции Kotlin:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all < kotlinOptions < // . >> 

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

Атрибуты, общие для JVM, JS и JS DCE

Имя Описание Возможные значения Значение по умолчанию
allWarningsAsErrors Сообщить об ошибке если есть какие-либо предупреждения (warnings) false
suppressWarnings Не создавать предупреждения (warnings) false
verbose Включить подробный вывод журнала false
freeCompilerArgs Список дополнительных аргументов компилятора []

Атрибуты, общие для JVM и JS

Имя Описание Возможные значения Значение по умолчанию
apiVersion Разрешить использование объявлений (declarations) только из указанных версий зависимых библиотек «1.0», «1.1», «1.2», «1.3 (EXPERIMENTAL)»
languageVersion Обеспечить совместимость источника с указанной языковой версией «1.0», «1.1», «1.2», «1.3 (EXPERIMENTAL)»

Атрибуты, специфичные для JVM

Имя Описание Возможные значения Значение по умолчанию
javaParameters Генерировать метаданные для reflection Java 1.8 по параметрам метода false
jdkHome Путь к домашнему каталогу JDK для включения в путь классов, если отличается от стандартного JAVA_HOME
jvmTarget Целевая версия сгенерированного байт-кода JVM (1.6 или 1.8), по умолчанию — 1.6 «1.6», «1.8» «1.6»
noJdk Не включать Java в classpath false
noReflect Не включайте реализацию Kotlin reflection в classpath true
noStdlib Не включать Kotlin runtime в classpath true

Атрибуты, специфичные для JS

Имя Описание Возможные значения Значение по умолчанию
friendModulesDisabled Отключить экспорт внутренних описаний (declaration) false
main Должна ли быть вызвана основная функция «call», «noCall» «call»
metaInfo Создание файлов .meta.js и .kjsm с метаданными. Использование их для создания библиотеки true
moduleKind Тип модуля, сгенерированного компилятором «plain», «amd», «commonjs», «umd» «plain»
noStdlib Не использовать Kotlin stdlib true
outputFile Выходной путь файла
sourceMap Создание источника (source map) false
sourceMapEmbedSources Вставлять исходные файлы (source map) в источник «never», «always», «inlining»
sourceMapPrefix Префикс для путей в источнике (source map)
target Создание JS-файлов для конкретной версии ECMA «v5» «v5»
typedArrays Перевести примитивные массивы на массивы в JS true

Создание документации

Чтобы создать документацию для проектов Kotlin, используйте Dokka; обратитесь к Dokka README для инструкций по настройке. Dokka поддерживает проекты на смешанном языке и может генерировать выходные данные в нескольких форматов, включая стандартный JavaDoc.

OSGi

Для поддержки OSGi см. Страницу Kotlin OSGi.

Примеры

В следующих примерах показаны различные возможности настройки плагина Gradle:

Источник

Оцените статью