컴파일러 실행 전략
_Kotlin 컴파일러 실행 전략(Kotlin compiler execution strategy)_은 Kotlin 컴파일러가 실행되는 위치를 정의합니다. Gradle 또는 Maven과 같은 빌드 도구에서 이 전략을 구성합니다.
두 가지 컴파일러 실행 전략이 있습니다:
| 전략 | Kotlin 컴파일러가 실행되는 위치 | 기타 특징 및 참고 사항 |
|---|---|---|
| Kotlin 데몬(Kotlin daemon) | 자체 데몬 프로세스 내부 | Gradle 및 Maven의 _기본이자 가장 빠른 전략_입니다. 데몬 프로세스는 서로 다른 빌드 시스템 프로세스와 여러 병렬 컴파일 간에 공유될 수 있습니다. |
| 프로세스 내(In process) | 빌드 도구의 프로세스 내부 | 메모리 관리 측면에서 가장 단순한 전략이지만, JVM 시스템 속성과 같은 상태를 공유하므로 동일한 프로세스에서 실행되는 다른 로직으로부터 덜 격리됩니다. |
Gradle에서 구성하기
다음 속성 중 하나를 사용하여 Kotlin 컴파일러 실행 전략을 정의할 수 있습니다.
kotlin.compiler.execution.strategyGradle 속성.compilerExecutionStrategy컴파일 태스크 속성.
Gradle 속성 사용
kotlin.compiler.execution.strategy 속성에 사용 가능한 값은 다음과 같습니다.
daemon(기본값)in-process
gradle.properties에서 kotlin.compiler.execution.strategy 속성을 설정하세요:
kotlin.compiler.execution.strategy=in-process컴파일 태스크 속성 사용
compilerExecutionStrategy 태스크 속성은 kotlin.compiler.execution.strategy Gradle 속성보다 우선순위가 높습니다.
compilerExecutionStrategy 태스크 속성에 사용 가능한 값은 다음과 같습니다.
DAEMON(기본값)IN_PROCESS
빌드 스크립트에서 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
}폴백(Fallback) 전략
Kotlin 데몬과의 통신에 실패하면 컴파일러는 "프로세스 내(In process)" 전략으로 폴백합니다.
이러한 폴백이 발생하면 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.알림 없는 폴백은 많은 시스템 자원을 소모하거나 결정론적이지 않은(non-deterministic) 빌드를 초래할 수 있습니다. 자세한 내용은 이 YouTrack 이슈를 참조하세요.
폴백을 방지하려면 kotlin.daemon.useFallbackStrategy Gradle 속성을 사용하세요. 기본값은 true입니다. false로 설정하면 데몬의 시작 또는 통신에 문제가 있을 때 빌드가 실패합니다. gradle.properties에 이 속성을 선언하세요:
kotlin.daemon.useFallbackStrategy=falseKotlin 컴파일 태스크에도 useDaemonFallbackStrategy 속성이 있습니다. 두 속성을 모두 사용하는 경우 useDaemonFallbackStrategy 속성이 우선순위를 갖습니다.
tasks {
compileKotlin {
useDaemonFallbackStrategy.set(false)
}
}tasks.named("compileKotlin").configure {
useDaemonFallbackStrategy = false
}컴파일을 실행하기 위한 메모리가 부족한 경우 로그에 관련 메시지가 표시됩니다.
