Skip to content

컴파일러 실행 전략

_Kotlin 컴파일러 실행 전략(Kotlin compiler execution strategy)_은 Kotlin 컴파일러가 실행되는 위치를 정의합니다. Gradle 또는 Maven과 같은 빌드 도구에서 이 전략을 구성합니다.

두 가지 컴파일러 실행 전략이 있습니다:

전략Kotlin 컴파일러가 실행되는 위치기타 특징 및 참고 사항
Kotlin 데몬(Kotlin daemon)자체 데몬 프로세스 내부Gradle 및 Maven의 _기본이자 가장 빠른 전략_입니다. 데몬 프로세스는 서로 다른 빌드 시스템 프로세스와 여러 병렬 컴파일 간에 공유될 수 있습니다.
프로세스 내(In process)빌드 도구의 프로세스 내부메모리 관리 측면에서 가장 단순한 전략이지만, JVM 시스템 속성과 같은 상태를 공유하므로 동일한 프로세스에서 실행되는 다른 로직으로부터 덜 격리됩니다.

Gradle에서 구성하기

다음 속성 중 하나를 사용하여 Kotlin 컴파일러 실행 전략을 정의할 수 있습니다.

  • kotlin.compiler.execution.strategy Gradle 속성.
  • compilerExecutionStrategy 컴파일 태스크 속성.

Gradle 속성 사용

kotlin.compiler.execution.strategy 속성에 사용 가능한 값은 다음과 같습니다.

  • daemon (기본값)
  • in-process

gradle.properties에서 kotlin.compiler.execution.strategy 속성을 설정하세요:

none
kotlin.compiler.execution.strategy=in-process

컴파일 태스크 속성 사용

compilerExecutionStrategy 태스크 속성은 kotlin.compiler.execution.strategy Gradle 속성보다 우선순위가 높습니다.

compilerExecutionStrategy 태스크 속성에 사용 가능한 값은 다음과 같습니다.

빌드 스크립트에서 compilerExecutionStrategy 태스크 속성을 설정하세요:

kotlin
import org.jetbrains.kotlin.gradle.tasks.CompileUsingKotlinDaemon
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerExecutionStrategy

// ...

tasks.withType<CompileUsingKotlinDaemon>().configureEach {
    compilerExecutionStrategy.set(KotlinCompilerExecutionStrategy.IN_PROCESS)
}
groovy
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은 빌드 출력에 다음과 같은 경고를 출력합니다.

none
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에 이 속성을 선언하세요:

none
kotlin.daemon.useFallbackStrategy=false

Kotlin 컴파일 태스크에도 useDaemonFallbackStrategy 속성이 있습니다. 두 속성을 모두 사용하는 경우 useDaemonFallbackStrategy 속성이 우선순위를 갖습니다.

kotlin
tasks {
    compileKotlin {
        useDaemonFallbackStrategy.set(false)
    }
}
groovy
tasks.named("compileKotlin").configure {
    useDaemonFallbackStrategy = false
}

컴파일을 실행하기 위한 메모리가 부족한 경우 로그에 관련 메시지가 표시됩니다.

Maven에서 구성하기