Gradle
Для построения проекта Kotlin с помощью Gradle, необходимо применить плагин Kotlin Gradle к вашему проекту и настроить зависимости.
Плагин и версии
Примените плагин Kotlin Gradle, используя DSL плагинов Gradle.
Плагин Kotlin Gradle и плагин kotlin-multiplatform 1.6.20 требуют Gradle версии 6.1 или выше.
plugins {
kotlin("<...>") version "1.6.20"
}
plugins {
id 'org.jetbrains.kotlin.<...>' version '1.6.20'
}
Заполнитель <...> следует заменить именем одного из плагинов, которые будут рассмотрены в последующих разделах.
Настройка для нескольких платформ
Проекты, нацеленные на несколько платформ, называемые проектами для нескольких платформ, требуют плагин kotlin-multiplatform. Узнайте больше о плагине.
plugins {
kotlin("multiplatform") version "1.6.20"
}
plugins {
id 'org.jetbrains.kotlin.multiplatform' version '1.6.20'
}
Настройка для JVM
Для работы с JVM примените плагин Kotlin JVM.
plugins {
kotlin("jvm") version "1.6.20"
}
plugins {
id "org.jetbrains.kotlin.jvm" version "1.6.20"
}
Значение version в этом блоке должно быть литералом, и его нельзя применить из другого скрипта сборки.
В качестве альтернативы можно использовать более старый подход apply plugin.
apply plugin: 'kotlin'
Применение плагинов Kotlin с apply в Kotlin Gradle DSL не рекомендуется – узнайте почему.
Kotlin и Java источники
Kotlin и Java источники могут храниться в одной папке или в разных. По умолчанию используются разные папки:
project
- src
- main (root)
- kotlin
- java
Соответствующее свойство sourceSets необходимо обновить, если вы не используете стандартную конвенцию:
sourceSets.main {
java.srcDirs("src/main/myJava", "src/main/myKotlin")
}
sourceSets {
main.kotlin.srcDirs += 'src/main/myKotlin'
main.java.srcDirs += 'src/main/myJava'
}
Проверка совместимости целевой JVM для связанных задач компиляции
В модуле сборки могут быть связанные задачи компиляции, например:
compileKotlinиcompileJavacompileTestKotlinиcompileTestJava
Для таких связанных задач плагин Kotlin Gradle проверяет совместимость целевой JVM. Разные значения jvmTarget в расширении kotlin и targetCompatibility в расширении java вызывают несовместимость. Например, задача compileKotlin имеет jvmTarget=1.8, а задача compileJava имеет (или унаследовала) targetCompatibility=15.
Управление поведением этой проверки осуществляется настройкой свойства kotlin.jvm.target.validation.mode в файле build.gradle на значение:
warning– значение по умолчанию; плагин Kotlin Gradle выведет сообщение об ошибке.error– плагин прервет сборку.ignore– плагин пропустит проверку и не выведет никаких сообщений.
Настройка пользовательской JDK
По умолчанию задачи компиляции Kotlin используют текущую JDK Gradle. Если необходимо изменить JDK по какой-либо причине, можно настроить домашнюю директорию JDK следующими способами:
Для Gradle 6.7 и выше – с помощью Java toolchains или Task DSL для задания локальной JDK.
Для более ранних версий Gradle без Java toolchains (до 6.6) – с интерфейсом
UsesKotlinJavaToolchainи Task DSL.
При использовании пользовательской JDK обратите внимание, что рабочие процессы kapt используют только kapt task workers с режимом изоляции процесса process isolation mode и игнорируют свойство kapt.workers.isolation.
Поддержка Java toolchains в Gradle
Gradle 6.7 ввёл поддержку Java toolchains. С помощью этой функции можно:
Использовать JDK и JRE, отличные от Gradle, для выполнения компиляции, тестирования и запуска исполняемых файлов.
Компилировать и тестировать код с ещё не выпущенной версией языка.
С поддержкой toolchains Gradle может автоматически обнаружить локальные JDK и установить недостающие JDK, необходимые Gradle для сборки. Теперь сам Gradle может работать на любой JDK и всё равно использовать функцию кеширования удалённых сборок для задач, зависящих от основной версии JDK.
Плагин Kotlin Gradle поддерживает Java toolchains для задач компиляции Kotlin/JVM. Задачи JS и Native не используют toolchains. Компилятор Kotlin всегда использует JDK, на котором работает Gradle daemon. Java toolchain:
Устанавливает опцию
jdkHome, доступную для целей JVM.Устанавливает
kotlinOptions.jvmTargetдо версии JDK toolchain, если пользователь явно не задаёт опциюjvmTarget. Если пользователь не настраивает toolchain, полеjvmTargetбудет использовать значение по умолчанию. Дополнительную информацию об совместимости целевой JVM см. ниже.Влияет на то, на какой JDK работают
kaptрабочие процессы.
Используйте следующий код для задания toolchain. Замените placeholder <MAJOR_JDK_VERSION> на версию JDK, которую вы хотите использовать:
kotlin {
jvmToolchain {
(this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)) // "8"
}
}
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)) // "8"
}
}
Обратите внимание, что установка toolchain через расширение kotlin также обновит toolchain для Java задач компиляции.
Для задания любой JDK (даже локальной) для конкретной задачи используйте Task DSL.
Установка версии JDK с помощью Task DSL
Если вы используете версию Gradle ниже 6.7, поддержка Java toolchains отсутствует. Вы можете использовать Task DSL, который позволяет устанавливать любую версию JDK для любой задачи, реализующей интерфейс UsesKotlinJavaToolchain. На данный момент такими задачами являются KotlinCompile и KaptTask. Если вы хотите, чтобы Gradle искал основную версию JDK, замените <MAJOR_JDK_VERSION> в скрипте сборки:
val service = project.extensions.getByType<JavaToolchainService>()
val customLauncher = service.launcherFor {
it.languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)) // "8"
}
project.tasks.withType<UsesKotlinJavaToolchain>().configureEach {
kotlinJavaToolchain.toolchain.use(customLauncher)
}
JavaToolchainService service = project.getExtensions().getByType(JavaToolchainService.class)
Provider<JavaLauncher> customLauncher = service.launcherFor {
it.languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)) // "8"
}
tasks.withType(UsesKotlinJavaToolchain::class).configureEach { task ->
task.kotlinJavaToolchain.toolchain.use(customLauncher)
}
Или вы можете указать путь к локальному JDK и заменить placeholder <LOCAL_JDK_VERSION> на эту версию JDK:
tasks.withType<UsesKotlinJavaToolchain>().configureEach {
kotlinJavaToolchain.jdk.use(
"/path/to/local/jdk", // Put a path to your JDK
JavaVersion.<LOCAL_JDK_VERSION> // For example, JavaVersion.17
)
}
Настройка для JavaScript
При работе только с JavaScript используйте плагин kotlin-js. Подробнее
plugins {
kotlin("js") version "1.6.20"
}
plugins {
id 'org.jetbrains.kotlin.js' version '1.6.20'
}
Kotlin и Java источники для JavaScript
Этот плагин работает только с файлами Kotlin, поэтому рекомендуется хранить Kotlin и Java файлы отдельно (если проект содержит Java файлы). Если вы не храните их раздельно, укажите папку с исходниками в блоке sourceSets:
kotlin {
sourceSets["main"].apply {
kotlin.srcDir("src/main/myKotlin")
}
}
kotlin {
sourceSets {
main.kotlin.srcDirs += 'src/main/myKotlin'
}
}
Настройка для Android
Для создания приложений Android рекомендуется использовать Android Studio. Узнайте, как использовать плагин Android Gradle.
Настройка зависимостей
Для добавления зависимости от библиотеки задайте зависимость требуемого типа (например, implementation) в блоке dependencies DSL наборов исходных файлов.
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("com.example:my-library:1.0")
}
}
}
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation 'com.example:my-library:1.0'
}
}
}
}
В качестве альтернативы вы можете указать зависимости на верхнем уровне.
Типы зависимостей
Выберите тип зависимости в соответствии с вашими потребностями.
Тип |
Описание |
Когда использовать |
|---|---|---|
|
Используется как при компиляции, так и во время выполнения и экспортируется для потребителей библиотеки. |
Если любой тип из зависимости используется в общедоступном API текущего модуля, используйте зависимость |
|
Используется во время компиляции и во время выполнения для текущего модуля, но не экспортируется для компиляции других модулей, зависящих от модуля с зависимостью `implementation`. |
Используйте для зависимостей, необходимых для внутренней логики модуля. Если модуль является конечным приложением, которое не публикуется, используйте зависимости |
|
Используется для компиляции текущего модуля и не доступен во время выполнения или при компиляции других модулей. |
Используйте для API, имеющего стороннюю реализацию, доступную во время выполнения. |
|
Доступно во время выполнения, но не видно во время компиляции любого модуля. |
Зависимость от стандартной библиотеки
Зависимость от стандартной библиотеки (stdlib) автоматически добавляется к каждому набору исходных файлов. Версия стандартной библиотеки совпадает с версией плагина Kotlin Gradle.
Для наборов исходных файлов, специфичных для платформы, используется соответствующий вариант библиотеки, специфичный для платформы, в то время как общая стандартная библиотека добавляется в остальные. Плагин Kotlin Gradle выберет соответствующую стандартную библиотеку JVM в зависимости от kotlinOptions.jvmTarget параметра компилятора вашего скрипта сборки Gradle.
Если вы явно объявляете зависимость от стандартной библиотеки (например, если вам нужна другая версия), плагин Kotlin Gradle не переопределит её и не добавит вторую стандартную библиотеку.
Если вам вообще не нужна стандартная библиотека, вы можете добавить опцию отказа от неё в gradle.properties:
kotlin.stdlib.default.dependency=false
Указание зависимостей от библиотек для тестирования
API kotlin.test доступен для тестирования проектов Kotlin на всех поддерживаемых платформах. Добавьте зависимость kotlin-test в набор исходных файлов commonTest , и плагин Gradle определит соответствующие зависимости для тестирования для каждого набора исходных файлов для тестирования:
kotlin-test-commonиkotlin-test-annotations-commonдля общих наборов исходных файловkotlin-test-junitдля наборов исходных файлов JVMkotlin-test-jsдля наборов исходных файлов Kotlin/JS
Для целей Kotlin/Native дополнительные зависимости для тестирования не требуются, реализации API kotlin.test встроены.
kotlin {
sourceSets {
val commonTest by getting {
dependencies {
implementation(kotlin("test")) // This brings all the platform dependencies automatically
}
}
}
}
kotlin {
sourceSets {
commonTest {
dependencies {
implementation kotlin("test") // This brings all the platform dependencies automatically
}
}
}
}
Вы также можете использовать зависимость kotlin-test в любом общем или специфичном для платформы наборе исходных файлов.
Для Kotlin/JVM Gradle по умолчанию использует JUnit 4. Поэтому зависимость kotlin("test") разрешается на вариант для JUnit 4, а именно kotlin-test-junit.
Вы можете выбрать JUnit 5 или TestNG, вызвав useJUnitPlatform() или useTestNG() в задаче тестирования вашего скрипта сборки. Следующий пример для проекта Kotlin Multiplatform:
kotlin {
jvm {
testRuns["test"].executionTask.configure {
useJUnitPlatform()
}
}
sourceSets {
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
}
}
kotlin {
jvm {
testRuns["test"].executionTask.configure {
useJUnitPlatform()
}
}
sourceSets {
commonTest {
dependencies {
implementation kotlin("test")
}
}
}
}
Следующий пример для проекта JVM:
dependencies {
testImplementation(kotlin("test"))
}
tasks {
test {
useTestNG()
}
}
dependencies {
testImplementation 'org.jetbrains.kotlin:kotlin-test'
}
test {
useTestNG()
}
Узнайте, как тестировать код с использованием JUnit на JVM.
Если вам нужно использовать другую среду тестирования JVM, отключите автоматический выбор среды тестирования, добавив строку kotlin.test.infer.jvm.variant=false в файл gradle.properties проекта. После этого добавьте среду тестирования как зависимость Gradle.
Если вы явно использовали вариант kotlin("test") в скрипте сборки и сборка проекта перестала работать из-за конфликта совместимости, см. данную проблему в Руководстве по совместимости.
Указание зависимости от библиотеки kotlinx
Если вы используете библиотеку kotlinx и вам нужна зависимость, специфичная для платформы, вы можете использовать платформенно-специфичные варианты библиотек с суффиксами, такими как -jvm или -js, например, kotlinx-coroutines-core-jvm. Вы также можете использовать базовое имя артефакта библиотеки — kotlinx-coroutines-core.
kotlin {
sourceSets {
val jvmMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0")
}
}
}
}
kotlin {
sourceSets {
jvmMain {
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.0'
}
}
}
}
Если вы используете многоплатформенную библиотеку и вам нужно ссылаться на общий код, укажите зависимость только один раз в общем наборе исходных файлов. Используйте базовое имя артефакта библиотеки, например kotlinx-coroutines-core или ktor-client-core.
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0")
}
}
}
}
kotlin {
sourceSets {
commonMain {
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
}
}
}
}
Указание зависимостей на верхнем уровне
В качестве альтернативы, вы можете указать зависимости на верхнем уровне, используя следующую схему для имён конфигураций: <sourceSetName><DependencyType>. Это может быть полезно для некоторых встроенных зависимостей Gradle, таких как gradleApi(), localGroovy(), или gradleTestKit(), которые недоступны в DSL зависимостей наборов исходных файлов.
dependencies {
"commonMainImplementation"("com.example:my-library:1.0")
}
dependencies {
commonMainImplementation 'com.example:my-library:1.0'
}
Обработка аннотаций
Kotlin поддерживает обработку аннотаций с помощью инструмента обработки аннотаций Kotlin kapt.
Инкрементная компиляция
Плагин Kotlin Gradle поддерживает инкрементную компиляцию. Инкрементная компиляция отслеживает изменения в исходных файлах между сборками, так что компилируются только файлы, затронутые этими изменениями.
Инкрементная компиляция поддерживается для проектов Kotlin/JVM и Kotlin/JS и включена по умолчанию.
Существует несколько способов выключения инкрементной компиляции:
kotlin.incremental=falseдля проектов Kotlin/JVM.kotlin.incremental.js=falseдля проектов Kotlin/JS.-
Используйте
-Pkotlin.incremental=falseили-Pkotlin.incremental.js=falseв качестве параметра командной строки.Параметр должен быть добавлен в каждую последующую сборку, и любая сборка с отключённой инкрементной компиляцией делает недействительными кеши инкрементной компиляции.
Первая сборка никогда не является инкрементной.
Поддержка кэша сборки Gradle
Плагин Kotlin использует кэш сборки Gradle, который хранит результаты сборки для повторного использования в будущих сборках.
Чтобы отключить кэширование для всех задач Kotlin, установите системную переменную kotlin.caching.enabled в значение false (запустите сборку со значением -Dkotlin.caching.enabled=false).
Если вы используете kapt, обратите внимание, что задачи обработки аннотаций kapt по умолчанию не кэшируются. Однако вы можете вручную включить кэширование для них.
Поддержка кэша конфигурации Gradle
Плагин Kotlin использует кэш конфигурации Gradle, который ускоряет процесс сборки, повторно используя результаты фазы конфигурации.
См. документацию Gradle, чтобы узнать, как включить кэш конфигурации. После включения этой функции плагин Kotlin Gradle автоматически начнёт её использовать.
Параметры компилятора
Используйте свойство kotlinOptions задачи компиляции Kotlin для указания дополнительных параметров компиляции.
При компиляции для JVM задачи называются compileKotlin для производственного кода и compileTestKotlin для тестового кода. Задачи для настраиваемых наборов исходных файлов называются в соответствии с шаблонами compile<Name>Kotlin.
Имена задач в проектах Android содержат имена вариантов сборки и следуют шаблону compile<BuildVariant>Kotlin, например, compileDebugKotlin или compileReleaseUnitTestKotlin.
При компиляции для JavaScript задачи называются compileKotlinJs для производственного кода и compileTestKotlinJs для тестового кода, и compile<Name>KotlinJs для настраиваемых наборов исходных файлов.
Чтобы настроить отдельную задачу, используйте её имя. Примеры:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile // ... val compileKotlin: KotlinCompile by tasks compileKotlin.kotlinOptions.suppressWarnings = true
compileKotlin {
kotlinOptions.suppressWarnings = true
}
//or
compileKotlin {
kotlinOptions {
suppressWarnings = true
}
}
Обратите внимание, что с Gradle Kotlin DSL вы должны сначала получить задачу из tasks проекта.
Используйте типы Kotlin2JsCompile и KotlinCompileCommon для целей JS и common соответственно.
Также можно настроить все задачи компиляции Kotlin в проекте:
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions { /*...*/ }
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions { /*...*/ }
}
Вот полный список параметров для задач Gradle:
Общие атрибуты для JVM, JS и JS DCE
Имя |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|
|
Сообщать об ошибке, если есть предупреждения |
false |
|
|
Не генерировать предупреждения |
false |
|
|
Включить подробный вывод журнала. Работает только при включенном уровне отладки журнала Gradle |
false |
|
|
Список дополнительных аргументов компилятора |
[] |
Общие атрибуты для JVM и JS
Имя |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|
|
Ограничить использование объявлений теми, которые относятся к указанной версии встроенных библиотек |
"1.3" (УСТАРЕЛО), "1.4" (УСТАРЕЛО), "1.5", "1.6", "1.7" (ЭКСПЕРИМЕНТАЛЬНО) |
|
|
Обеспечить совместимость исходного кода с указанной версией Kotlin |
"1.4" (УСТАРЕЛО), "1.5", "1.6", "1.7" (ЭКСПЕРИМЕНТАЛЬНО) |
Атрибуты, специфичные для JVM
Имя |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|
|
Генерировать метаданные для отражения Java 1.8 на параметрах метода |
false |
|
|
Включить пользовательский JDK из указанного местоположения в classpath вместо JAVA_HOME по умолчанию. Прямая настройка устарела с версии 1.5.30, используйте другие способы установки этого параметра. |
||
|
Целевая версия генерируемого байт-кода JVM |
"1.6" (УСТАРЕЛО), "1.8", "9", "10", "11", "12", "13", "14", "15", "16", "17" |
"1.8" |
|
Не включать автоматически среду выполнения Java в classpath |
false |
|
|
Использовать старый бэкенд JVM |
false |
Атрибуты, специфичные для JS
Имя |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|
|
Отключить экспорт внутренних объявлений |
false |
|
|
Определить, следует ли вызывать функцию |
"call", "noCall" |
"call" |
|
Генерировать файлы .meta.js и .kjsm с метаданными. Используется для создания библиотеки |
true |
|
|
Тип модуля JS, генерируемого компилятором |
"umd", "commonjs", "amd", "plain" |
"umd" |
|
Не включать автоматически стандартную библиотеку Kotlin/JS по умолчанию в зависимости компиляции |
true |
|
|
Целевой файл *.js для результата компиляции |
"<buildDir>/js/packages/<project.name>/kotlin/<project.name>.js" |
|
|
Генерировать карту исходного кода |
true |
|
|
Встраивать исходные файлы в карту исходного кода |
"never", "always", "inlining" |
|
|
Добавить указанный префикс к путям в карте исходного кода |
||
|
Генерировать JS файлы для конкретной версии ECMA |
"v5" |
"v5" |
|
Преобразовывать примитивные массивы в типизированные массивы JS |
true |
Генерация документации
Для генерации документации для проектов Kotlin используйте Dokka; пожалуйста, обратитесь к Dokka README для инструкций по настройке. Dokka поддерживает проекты на смешанных языках и может генерировать выходные данные в нескольких форматах, включая стандартный JavaDoc.
OSGi
Для поддержки OSGi см. страницу Kotlin OSGi.
Использование Gradle Kotlin DSL
При использовании Gradle Kotlin DSL, применяйте плагины Kotlin с помощью блока plugins { ... }. Если вы применяете их с помощью apply { plugin(...) } вместо этого, вы можете столкнуться с неразрешёнными ссылками на расширения, генерируемые Gradle Kotlin DSL. Чтобы решить эту проблему, вы можете закомментировать ошибочные использования, запустить задачу Gradle kotlinDslAccessorsSnapshot, а затем раскомментировать использования и перезапустить сборку или повторно импортировать проект в IDE.
Kotlin-демон и его использование с Gradle
Kotlin-демон:
Работает совместно с Gradle-демоном для компиляции проекта.
Работает отдельно при компиляции проекта с встроенной системой сборки IntelliJ IDEA.
Kotlin-демон запускается на стадии выполнения Gradle исполнения, когда одна из задач компиляции Kotlin начинает компилировать исходные файлы. Kotlin-демон останавливается вместе с Gradle-демоном или через два часа бездействия без компиляции Kotlin.
Kotlin-демон использует ту же JDK, что и Gradle-демон.
Установка аргументов JVM для Kotlin-демона
Каждый из параметров в следующем списке переопределяет предыдущие:
-
Если ничего не указано, Kotlin-демон наследует аргументы от Gradle-демона. Например, в файле
gradle.properties.org.gradle.jvmargs=-Xmx1500m -Xms=500m
-
Если аргументы JVM Gradle-демона имеют системную переменную
kotlin.daemon.jvm.options, используйте её в файлеgradle.properties:org.gradle.jvmargs=-Dkotlin.daemon.jvm.options=-Xmx1500m,Xms=500m
При передаче аргументов следуйте этим правилам:
Используйте знак минус
-перед аргументамиXmx,XX:MaxMetaspaceSize, иXX:ReservedCodeCacheSize, не используя его перед другими аргументами.Разделяйте аргументы запятыми (
,) без пробелов. Аргументы, следующие за пробелом, будут использованы для Gradle-демона, а не для Kotlin-демона.
-
Вы можете добавить свойство
kotlin.daemon.jvmargsв файлеgradle.properties:kotlin.daemon.jvmargs=-Xmx1500m -Xms=500m
-
Вы можете указать аргументы в расширении
kotlin:kotlin { kotlinDaemonJvmArgs = listOf("-Xmx486m", "-Xms256m", "-XX:+UseParallelGC") }kotlin { kotlinDaemonJvmArgs = ["-Xmx486m", "-Xms256m", "-XX:+UseParallelGC"] } -
Вы можете указать аргументы для конкретной задачи:
tasks.withType<CompileUsingKotlinDaemon>().configureEach { kotlinDaemonJvmArguments.set(listOf("-Xmx486m", "-Xms256m", "-XX:+UseParallelGC")) }tasks.withType(CompileUsingKotlinDaemon::class).configureEach { task -> task.kotlinDaemonJvmArguments.set(["-Xmx1g", "-Xms512m"]) }
Поведение Kotlin-демона с аргументами JVM
При настройке аргументов JVM для Kotlin-демона обратите внимание на следующее:
Ожидается, что одновременно будут работать несколько экземпляров Kotlin-демона, когда разные подпроекты или задачи имеют разные наборы аргументов JVM.
-
Новый экземпляр Kotlin-демона запускается только тогда, когда Gradle выполняет связанную задачу компиляции, и существующие Kotlin-демоны не имеют такого же набора аргументов JVM. Представьте, что ваш проект содержит много подпроектов. Большинство из них требует определенного объема памяти для Kotlin-демона, но один модуль требует много памяти (хотя он редко компилируется). В этом случае вы должны предоставить другой набор аргументов JVM для такого модуля, чтобы Kotlin-демон с большим размером кучи запускался только для разработчиков, работающих с этим конкретным модулем.
Если
Xmxне указан, Kotlin-демон унаследует его от Gradle-демона.
Определение стратегии выполнения компилятора Kotlin
Стратегия выполнения компилятора Kotlin определяет, где выполняется компилятор Kotlin и поддерживается ли инкрементная компиляция в каждом случае.
Существует три стратегии выполнения компилятора:
Стратегия |
Место выполнения компилятора Kotlin |
Инкрементная компиляция |
Другие характеристики |
|---|---|---|---|
Демнонный |
Внутри своего демона |
Да |
По умолчанию. Может быть общим для разных демонов Gradle |
В процессе |
Внутри Gradle-демона |
Нет |
Может использовать одну кучу с Gradle-демоном |
Вне процесса |
В отдельном процессе для каждого вызова |
Нет |
- |
Для определения стратегии выполнения компилятора Kotlin можно использовать одно из следующих свойств:
Свойство Gradle
kotlin.compiler.execution.strategy.Свойство задачи компиляции
compilerExecutionStrategy.Системное свойство
-Dkotlin.compiler.execution.strategy, которое будет удалено в будущих версиях.
Приоритет свойств следующий:
Свойство задачи
compilerExecutionStrategyимеет приоритет над системным свойством и свойством Gradlekotlin.compiler.execution.strategy.Свойство Gradle имеет приоритет над системным свойством.
Доступные значения для свойств kotlin.compiler.execution.strategy (как системных, так и Gradle):
daemon(по умолчанию)in-processouf-of-process
Используйте свойство Gradle kotlin.compiler.execution.strategy в gradle.properties:
kotlin.compiler.execution.strategy=out-of-process
Доступные значения для свойства задачи compilerExecutionStrategy:
org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy.DAEMON(по умолчанию)org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy.IN_PROCESSorg.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy.OUT_OF_PROCESS
Используйте свойство задачи compilerExecutionStrategy в своих скриптах сборки:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
// ...
tasks.withType<KotlinCompile>().configureEach {
compilerExecutionStrategy.set(KotlinCompilerExecutionStrategy.IN_PROCESS)
}
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
// ...
tasks.withType(KotlinCompile)
.configureEach {
compilerExecutionStrategy.set(KotlinCompilerExecutionStrategy.IN_PROCESS)
}
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/gradle.html