gradle, gradle.kts 차이(Gradle Kotlin DSL 알아보기)

말랑카우
4 min readSep 21, 2022

--

IntelliJ를 이용하여 Kotlin + Gradle 프로젝트를 생성한다면, 아래 그림처럼 Gradle DSL(Domain Specific Language)선택지에 Groovy 혹은 Kotlin을 볼 수 있다.

Kotlin DSL은 Gradle 5.0 부터 지원되기 시작하였고, 기존 Groovy DSL이 Groovy 언어로 작성된다는 것과는 다르게 Kotlin 언어로 작성된다는 차이점을 가지고 있다. (그리고, 향상된 편집 경험을 제공한다고 안내되어 있다.)

Groovy 언어의 특징인 단순화된 문법, 동적 프로그래밍(런타임 시에 자료형 결정)이 아닌 Kotlin은 정적 프로그래밍(컴파일 시에 자료형 결정)과 안정성을 지원하므로 IDE를 사용하면 ‘구문 강조 기능’과 ‘코드 자동완성’이 지원된다는 장점이 있다.

그러므로 아래처럼 빌드 스크립트에 프로젝트 속성값을 선언해서 사용이 가능하다.

val myProperty: String by project
val myNullableProperty: String? by project

또한, 기존에 Groovy 언어를 이용해 자유롭게 빌드스크립트를 작성했다면, Kotlin DSL은 적당한 수준의 제약이 존재한다.

  • Groovy DSL 작성 예
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web"
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
  • Kotlin DSL 작성 예
dependencies {
"implementation"("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-web")
"testImplementation"("org.springframework.boot:spring-boot-starter-test")
}

Kotlin에 익숙하지 않을 경우, Kotlin DSL 설정 파일(.gradle.kts)에 Groovy를 사용해도 빌드에 문제가 없다. 또 멀티 모듈 프로젝트로 구성될 경우, 하위 모듈마다 각기 다른 DSL으로 작성해도 문제 없다.

Type-safe model accessors를 지원하여, 기존 Groovy DSL과는 다르게 빌드 요소를 선언할 수도 있다.

  • Groovy DSL은 런타임중에도 정의되는 많은 요소를 참조할 수 있는데, Kotlin DSL의 Type-safe model accessors는 이러한 동적 요소를 안전하게 대체한다.
  • dependency(api, implementation, testImplementation), sourceSets, java.sourceCompatibility, test task 등을 Type-safe model accessors로 정의할 수 있다.
  • Type-safe model accessors을 사용할 경우, 멀티 모듈 프로젝트 구성 시 모든 하위 모듈이 Type-safe model accessors을 사용해야 함에 주의

그 외 모든 Kotlin DSL의 특징은 공식 문서에서 확인 가능 하다.

또, Groovy DSL → Kotlin DSL 마이그레이션도 가능하다.

--

--