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 пошаговая компиляция доступна по умолчанию.
Существует несколько способов переопределить настройку по умолчанию:
Добавить
kotlin.incremental=true
илиkotlin.incremental=false
либо вgradle.properties
, либо вlocal.properties
файл;Добавить
-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: