Стратегия выполнения компилятора
Стратегия выполнения компилятора Kotlin определяет, где запускается компилятор Kotlin. Инструменты сборки, такие как Gradle или Maven, настраивают стратегию.
Существует две стратегии выполнения компилятора:
Стратегия |
Где запускается компилятор Kotlin |
Другие характеристики и примечания |
|---|---|---|
В отдельном процессе демона |
Стратегия по умолчанию и самая быстрая в Gradle и Maven. Процесс демона может использоваться совместно различными процессами системы сборки и несколькими параллельными компиляциями. |
|
В процессе |
В процессе инструмента сборки |
Самая простая стратегия с точки зрения управления памятью, но она обеспечивает меньшую изоляцию от другой логики, выполняющейся в том же процессе, поскольку использует общее состояние, например системные свойства JVM. |
Настройка в Gradle
Стратегию выполнения компилятора Kotlin можно задать с помощью одного из следующих свойств:
Свойство Gradle
kotlin.compiler.execution.strategy.Свойство задачи компиляции
compilerExecutionStrategy.
Использование свойства Gradle
Возможные значения свойства kotlin.compiler.execution.strategy:
daemon(по умолчанию)in-process
Задайте свойство kotlin.compiler.execution.strategy в файле gradle.properties:
kotlin.compiler.execution.strategy=in-process
Использование свойства задачи компиляции
Свойство задачи compilerExecutionStrategy имеет приоритет над свойством Gradle kotlin.compiler.execution.strategy.
Возможные значения свойства задачи compilerExecutionStrategy:
DAEMON(по умолчанию)
Задайте свойство задачи compilerExecutionStrategy в скриптах сборки:
import org.jetbrains.kotlin.gradle.tasks.CompileUsingKotlinDaemon
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
// ...
tasks.withType<CompileUsingKotlinDaemon>().configureEach {
compilerExecutionStrategy.set(KotlinCompilerExecutionStrategy.IN_PROCESS)
}
import org.jetbrains.kotlin.gradle.tasks.CompileUsingKotlinDaemon
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy
// ...
tasks.withType(CompileUsingKotlinDaemon)
.configureEach {
compilerExecutionStrategy = KotlinCompilerExecutionStrategy.IN_PROCESS
}
Резервная стратегия
Если не удается установить связь с демоном Kotlin, компилятор переключается на стратегию «В процессе».
При таком переключении Gradle выводит в журнал сборки следующее предупреждение:
Failed to compile with Kotlin daemon: java.lang.RuntimeException: Could not connect to Kotlin compile daemon [exception stacktrace] Using fallback strategy: Compile without Kotlin daemon Try ./gradlew --stop if this issue persists.
Незаметное переключение на резервную стратегию может потреблять много системных ресурсов или приводить к недетерминированным сборкам. Дополнительную информацию см. в этой задаче YouTrack.
Чтобы предотвратить переключение на резервную стратегию, используйте свойство Gradle kotlin.daemon.useFallbackStrategy. Значение по умолчанию — true. Если задать значение false, сборка завершится с ошибкой при проблемах с запуском демона или установлением связи с ним. Укажите это свойство в файле gradle.properties:
kotlin.daemon.useFallbackStrategy=false
В задачах компиляции Kotlin также есть свойство useDaemonFallbackStrategy. Если используются оба свойства, приоритет имеет свойство useDaemonFallbackStrategy.
tasks {
compileKotlin {
useDaemonFallbackStrategy.set(false)
}
}
tasks.named("compileKotlin").configure {
useDaemonFallbackStrategy = false
}
Если для выполнения компиляции недостаточно памяти, в журналах отображается соответствующее сообщение.
Настройка в Maven
По умолчанию Maven использует стратегию выполнения компилятора с демоном Kotlin. Чтобы переключиться на стратегию «В процессе», задайте следующее свойство в файле pom.xml:
<properties>
<kotlin.compiler.daemon>false</kotlin.compiler.daemon>
</properties>
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/compiler-execution-strategy.html