-
build.gradle to build.gradle.kts (Groovy를 Kotlin으로 마이그레이션)프로젝트/자프링 -> 코프링 마이그레이션 2022. 12. 11. 00:01반응형
개요
모든 파일을 자바에서 코틀린으로 변경하였습니다.
이제 남은 것은 build.gradle의 groovy 기반의 빌드 스크립트를 kotlin으로 바꾸고자 합니다.
Groovy DSL -> Kotlin DSL
DSL은 특정 분야에 최적화된 프로그래밍 언어를 말합니다
예를 들면 SQL이 있습니다.
Gradle공식문서에서 친절하기 Groovy를 Kotlin으로 마이그레이션 하는 문서를 제공합니다
https://docs.gradle.org/current/userguide/migrating_from_groovy_to_kotlin_dsl.html
Migrating build logic from Groovy to Kotlin
Declaring dependencies in existing configurations is similar to the way it’s done in Groovy build scripts, as you can see in this example: build.gradle plugins { id 'java-library' } dependencies { implementation 'com.example:lib:1.1' runtimeOnly 'com.exa
docs.gradle.org
이외의 것들은 Gradle Kotlin DSL primer 문서를 참조해야 합니다.
https://docs.gradle.org/current/userguide/kotlin_dsl.html
Gradle Kotlin DSL Primer
Gradle’s Kotlin DSL provides an alternative syntax to the traditional Groovy DSL with an enhanced editing experience in supported IDEs, with superior content assist, refactoring, documentation, and more. This chapter provides details of the main Kotlin D
docs.gradle.org
마이그레이션 전 유의사항
- Java 7은 지원하지 않기 때문에 Java 8 이상으로 실행해야 한다.
- 최신버전의 Gradle, plugins, IDE를 사용하는 것이 먼저입니다.
Groovy vs Kotlin
- Groovy는 '작은 따옴표' 와 "큰 띠옴표"를 사용할 수 있지만 Kotlin은 "큰 따옴표"만 사용 가능
- 변수 할당에 = 사용
- 함수 호출에 () 사용
예시(build.gradle)
//build.gradle group "com.acme" dependencies { implementation 'com.acme:example:1.0' }
예시(budil.gradle.kts)
//build.gradle.kts group = "com.acme" dependencies { implementation ("com.acme:example:1.0") }
멀티 모듈 환경에서 어떤 모듈은 build.gradle을 사용하고 어떤 모듈은 build.gradle.kts를 사용할 수 있습니다.
우선 첫번째로 build.gradle에서 다음과 같은 작업을 수행합니다.
- 큰 따옴표로 사용하여 인용부 통일
- 함수 호출 및 속성 할당을 각각 괄호와 = 연산자를 사용하기
기존의 build.gradle(위의 첫 번째 작업 적용)
plugins { id "org.springframework.boot" version "2.6.7" id "org.asciidoctor.jvm.convert" version "3.3.2" id "io.spring.dependency-management" version "1.0.11.RELEASE" id "org.jetbrains.kotlin.jvm" version "1.6.21" id "java" id "org.jetbrains.kotlin.plugin.spring" version "1.6.21" id "org.jetbrains.kotlin.plugin.jpa" version "1.6.21" } group = "anthill" version = "0.0.1-SNAPSHOT" sourceCompatibility = "11" configurations { asciidoctorExtensions } repositories { mavenCentral() } dependencies { implementation "org.jetbrains.kotlin:kotlin-reflect" testImplementation "org.junit.jupiter:junit-jupiter-params:5.4.2" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" implementation "org.springframework.boot:spring-boot-starter-data-jpa" implementation "org.springframework.boot:spring-boot-starter-web" implementation "mysql:mysql-connector-java" implementation "org.springframework.boot:spring-boot-starter-validation" implementation "org.projectlombok:lombok:1.18.24" implementation "org.mindrot:jbcrypt:0.4" implementation "io.jsonwebtoken:jjwt:0.9.1" asciidoctorExtensions "org.springframework.restdocs:spring-restdocs-asciidoctor" testImplementation "org.springframework.restdocs:spring-restdocs-mockmvc" compileOnly "org.projectlombok:lombok" runtimeOnly "com.h2database:h2" testImplementation "org.springframework.boot:spring-boot-starter-test" } compileKotlin { kotlinOptions { jvmTarget = "11" } } compileTestKotlin { kotlinOptions { jvmTarget = "11" } } ext { snippetsDir = file("build/generated-snippets") } test { outputs.dir snippetsDir useJUnitPlatform() } asciidoctor { // asciidoctor 작업 구성 configurations "asciidoctorExtensions" // 위에서 작성한 configuration 적용 dependsOn test // test 작업 이후에 작동하도록 하는 설정 inputs.dir snippetsDir // snippetsDir 를 입력으로 구성 } bootJar { dependsOn asciidoctor copy { from "${asciidoctor.outputDir}" // /html5를 사용하지 않는다! into "src/main/resources/static/docs" // /static/docs로 복사! } } jar { enabled = false }
plugins 적용하기
기존(build.gradle)
plugins { id "org.springframework.boot" version "2.6.7" id "org.asciidoctor.jvm.convert" version "3.3.2" id "io.spring.dependency-management" version "1.0.11.RELEASE" id "org.jetbrains.kotlin.jvm" version "1.6.21" id "java" id "org.jetbrains.kotlin.plugin.spring" version "1.6.21" id "org.jetbrains.kotlin.plugin.jpa" version "1.6.21" }
변경(build.gradle.kts)
plugins { id("org.springframework.boot") version "2.6.7" id("org.asciidoctor.jvm.convert") version "3.3.2" id("io.spring.dependency-management") version "1.0.11.RELEASE" id("org.jetbrains.kotlin.jvm") version "1.6.21" id ("java") id ("org.jetbrains.kotlin.plugin.spring") version "1.6.21" id ("org.jetbrains.kotlin.plugin.jpa") version "1.6.21" }
Custom Configuration and dependenceis 적용
기존(build.gradle)
configurations { asciidoctorExtensions }
변경(build.gradle.kts)
val asciidoctorExtensions by configurations.creating
configurations은 implmentation, testImplementation과 같이 asciidoctorExtensions를 사용할 수 있게끔 합니다.
예시
asciidoctorExtensions("org.springframework.restdocs:spring-restdocs-asciidoctor")
sourceCompatibility
기존(build.gradle)
sourceCompatibility = '11'
변경(build.gradle.kts)
java.sourceCompatibility = JavaVersion.VERSION_11
test
기존(build.gradle)
test { outputs.dir snippetsDir useJUnitPlatform() }
변경(build.gradle.kts)
tasks.withType<Test> { useJUnitPlatform() }
restdocs
기존(build.gradle)
ext { snippetsDir = file('build/generated-snippets') } asciidoctor { // asciidoctor 작업 구성 configurations 'asciidoctorExtensions' // 위에서 작성한 configuration 적용 dependsOn test // test 작업 이후에 작동하도록 하는 설정 inputs.dir snippetsDir // snippetsDir 를 입력으로 구성 } bootJar { dependsOn asciidoctor copy { from "${asciidoctor.outputDir}" // /html5를 사용하지 않는다! into 'src/main/resources/static/docs' // /static/docs로 복사! } }
변경(build.gradle.kts)
val snippetsDir by extra { file("build/generated-snippets") } tasks { asciidoctor { dependsOn(test) configurations("asciidoctorExtensions") inputs.dir(snippetsDir) } register<Copy>("copyDocument") { dependsOn(asciidoctor) from(file("build/docs/asciidoc/index.html")) into(file("src/main/resources/static/docs")) } bootJar { dependsOn("copyDocument") } }
gradle에는 project properties와 extra properties가 존재합니다.
val myNewProperty by extra("initial value")
myNewProperty라는 새 추가 속성을 만들고 속성 유형을 결정하는 "초기 값" 값으로 초기화합니다.
참고 자료
https://docs.gradle.org/current/userguide/migrating_from_groovy_to_kotlin_dsl.html
Migrating build logic from Groovy to Kotlin
Declaring dependencies in existing configurations is similar to the way it’s done in Groovy build scripts, as you can see in this example: build.gradle plugins { id 'java-library' } dependencies { implementation 'com.example:lib:1.1' runtimeOnly 'com.exa
docs.gradle.org
https://kwongdevelop.tistory.com/68
Migrating build.gradle from Groovy to Kotlin
guides.gradle.org/migrating-build-logic-from-groovy-to-kotlin/ Migrating build logic from Groovy to Kotlin Declaring dependencies in existing configurations is similar to the way it’s done in Groov..
kwongdevelop.tistory.com
https://docs.gradle.org/current/userguide/kotlin_dsl.html
Gradle Kotlin DSL Primer
Gradle’s Kotlin DSL provides an alternative syntax to the traditional Groovy DSL with an enhanced editing experience in supported IDEs, with superior content assist, refactoring, documentation, and more. This chapter provides details of the main Kotlin D
docs.gradle.org
'프로젝트 > 자프링 -> 코프링 마이그레이션' 카테고리의 다른 글
Kotlin DSL Gradle 멀티 모듈 적용 (0) 2022.12.27 @SpringBootApplication 자바[Java] -> 코틀린[Kotlin]으로 변경 (0) 2022.12.06 [kotlin][Mockito][Junit5] any() must not be null 에러 해결 (0) 2022.12.05 Kotlin 각종 어노테이션 사용법(@Index, @Embeddable, @Size) (0) 2022.12.01 Kotlin과 Lombok 컴파일 에러 해결 (0) 2022.11.30