编译器执行策略
Kotlin 编译器执行策略 定义了 Kotlin 编译器在何处运行. 构建工具, 例如Gradle 或 Maven, 会配置这个策略.
有两种编译器执行策略:
策略 | Kotlin 编译器的运行位置 | 其他特性和注意事项 |
|---|---|---|
在独立的 daemon 进程内 | 这是 Gradle 和 Maven 中 默认而且最快的策略. Daemon 进程可以在不同的构建系统进程之间共用, 并且支持多个并行编译. | |
In process | 在构建工具的进程内 | 从内存管理的角度来看这是最简单的策略, 但是, 由于它与同一进程中运行的其他逻辑共享状态 (例如 JVM 系统属性), 因此隔离性较差. |
在 Gradle 中配置
你可以使用以下属性之一, 定义 Kotlin 编译器执行策略:
Gradle 属性
kotlin.compiler.execution.strategy.编译任务属性
compilerExecutionStrategy.
使用 Gradle 属性
kotlin.compiler.execution.strategy 属性的可选值为:
daemon(默认值)in-process
在 gradle.properties 中设置 kotlin.compiler.execution.strategy 属性:
使用编译任务属性
compilerExecutionStrategy task 属性的优先级高于 Gradle 属性 kotlin.compiler.execution.strategy.
compilerExecutionStrategy task 属性的可选值为:
DAEMON(默认值)
在构建脚本中设置 compilerExecutionStrategy task 属性:
回退策略
如果与 Kotlin Daemon 的通信失败, 编译器会回退到 "In process" 策略.
发生这种回退时, Gradle 会在构建的输出中打印以下警告:
静默的回退可能消耗大量系统资源, 或导致不确定的构建结果. 详情请参见这个 YouTrack issue.
要禁止回退, 请使用 Gradle 属性 kotlin.daemon.useFallbackStrategy. 这个属性的默认值为 true. 当设置为 false 时, 如果 Daemon 的启动或通信出现问题, 构建会失败. 请在 gradle.properties 中声明这个属性:
Kotlin 编译 task 中还有一个 useDaemonFallbackStrategy 属性. 如果两个属性都使用, useDaemonFallbackStrategy 属性的优先级更高.
如果内存不足以运行编译, 日志中会显示相关信息.
在 Maven 中配置
默认情况下, Maven 使用 Kotlin Daemon 编译器执行策略. 要切换到 "in process" 策略, 请在你的 pom.xml 文件中设置以下属性: