빌드 도구 API
빌드 도구 API
코틀린에는 빌드 시스템이 코틀린 컴파일러와 통합하는 방식을 단순화해 주는 빌드 도구 API(Build tools API, BTA) 가 있어요.
빌드 시스템에 코틀린 지원을 완전히 추가하는 일(증분 컴파일, 코틀린 컴파일러 플러그인, 데몬, 코틀린 멀티플랫폼 등)은 상당한 노력이 필요해요. BTA는 빌드 시스템과 코틀린 컴파일러 생태계 사이의 단일화된 API를 제공해서 이런 복잡성을 줄이려는 목표예요.
BTA는 빌드 시스템이 구현할 수 있는 단일 진입점(single entry point) 을 정의해요. 덕분에 컴파일러의 내부 구현 세부 사항과 깊이 있게 통합할 필요가 없어져요.
안정성 수준은 대상에 따라 달라요. BTA는 Kotlin/JVM에서 Beta, Kotlin/JS와 Kotlin/Wasm에서는 Alpha 예요. 자세한 내용은 빌드 도구 API(BTA)를 참고하세요. BTA를 쓰려면 @OptIn(ExperimentalBuildToolsApi::class)로 옵트인(opt-in)해야 해요.
제안에 관심이 있거나 피드백을 나누고 싶다면 KEEP을 확인하세요. 구현 상태는 YouTrack에서 따라갈 수 있어요.
출처: Build tools API
본문
Gradle과의 통합
코틀린 Gradle 플러그인(KGP)은 기본적으로 Kotlin/JVM 컴파일에 BTA를 사용해요.
KGP 사용 경험에 대한 피드백은 YouTrack에서 남겨 주시면 감사하겠어요.
Kotlin/JS, Kotlin/Wasm, 코틀린 메타데이터에 BTA 활성화하기
Kotlin 2.4.20부터 KGP는 Kotlin/JS, Kotlin/Wasm, 코틀린 메타데이터 컴파일도 BTA를 통해 실행할 수 있어요. 이렇게 하면 KGP가 컴파일러와 더 일관되게 상호작용하고, 어떤 경우에는 컴파일이 더 빠르고 안정적이 돼요.
Kotlin 2.4.20에서 이 대상들은 옵트인으로 제공돼요. 직접 써 보려면 gradle.properties 파일에 해당 속성들을 추가하세요.
kotlin.js.runViaBuildToolsApi = true
kotlin.wasm.runViaBuildToolsApi = true
kotlin.metadata.runViaBuildToolsApi = true
다른 컴파일러 버전 구성하기
BTA를 쓰면 이제 KGP가 사용하는 버전과 다른 코틀린 컴파일러 버전을 사용할 수 있어요. 이런 경우에 유용하죠.
- 아직 빌드 스크립트를 업데이트하지 않았는데 새 코틀린 기능을 써 보고 싶을 때.
- 최신 플러그인 수정 사항은 필요하지만, 당분간은 더 오래된 컴파일러 버전에 머물고 싶을 때.
build.gradle.kts 파일에서 이렇게 구성할 수 있어요.
import org.jetbrains.kotlin.buildtools.api.ExperimentalBuildToolsApi
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
plugins {
kotlin("jvm") version "2.4.20"
}
group = "org.jetbrains.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
kotlin {
jvmToolchain(8)
@OptIn(ExperimentalBuildToolsApi::class, ExperimentalKotlinGradlePluginApi::class)
compilerVersion.set("2.3.21") // <-- different version than 2.4.20
}
호환되는 코틀린 컴파일러와 KGP 버전
BTA가 지원하는 범위는요.
- 직전 세 개의 주 버전(메이저) 코틀린 컴파일러 버전.
- 앞으로 한 개의 주 버전.
예를 들어 KGP 2.2.0에서 지원되는 코틀린 컴파일러 버전은 이래요.
- 1.9.25
- 2.0.x
- 2.1.x
- 2.2.x
- 2.3.x
제한 사항
컴파일러 플러그인과 함께 다른 컴파일러 버전을 사용하면 코틀린 컴파일러 예외가 발생할 수 있어요. 코틀린 팀은 향후 코틀린 릴리스에서 이 문제를 해결할 계획이에요.
"in-process" 전략으로 증분 컴파일 활성화하기
KGP는 세 가지 컴파일러 실행 전략을 지원해요. 보통은 Gradle 데몬에서 컴파일러를 실행하는 "in-process" 전략이 증분 컴파일을 지원하지 않아요.
BTA와 함께라면 "in-process" 전략에서도 증분 컴파일을 지원해요. 활성화하려면 gradle.properties 파일에 다음 속성을 추가하세요.
kotlin.compiler.execution.strategy=in-process
Maven과의 통합
BTA 덕분에 kotlin-maven-plugin이 기본 컴파일러 실행 전략인 코틀린 데몬을 지원할 수 있어요. kotlin-maven-plugin은 기본적으로 BTA를 사용하므로 추가로 구성할 게 없어요.
BTA 덕분에 앞으로 증분 컴파일 안정화 같은 더 많은 기능을 제공할 수 있게 돼요.