Gradle

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

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

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

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

buildscript {
    ext.kotlin_version = '{{ site.data.releases.latest.version }}'

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

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

Поддержка JVM

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

apply plugin: "kotlin"

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

plugins {
    id "org.jetbrains.kotlin.jvm" version "{{ site.data.releases.latest.version }}"
}

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

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

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

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

sourceSets {
    main.kotlin.srcDirs += 'src/main/myKotlin'
    main.java.srcDirs += 'src/main/myJava'
}

Поддержка JavaScript

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

apply plugin: "kotlin2js"

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

sourceSets {
    main.kotlin.srcDirs += 'src/main/myKotlin'
}

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

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

compileKotlin2Js {
	kotlinOptions.metaInfo = true
}

Поддержка Android

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

buildscript {
    ext.kotlin_version = '{{ site.data.releases.latest.version }}'

    ...

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

Не забудьте настроить standard library dependency.

Android Studio

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

android {
  ...

  sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
  }
}

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

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

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

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib"
}

Для поддержки 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 annotation processing tool (kapt).

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

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 {
    experimental {
        coroutines 'enable'
    }
}

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

Модули 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 в любом случае, добавьте следующие строки в сценарий сборки:

kapt {
    useBuildCache = true
}

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

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

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

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

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

При поддержке JavaScript задачи называются compileKotlin2Js и compileTestKotlin2Js соответственно, и compile <Name> 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: