Spring 이니셜 라이저를 통해 또는 직접 프로젝트를 생성하고 나서 build.gradle.kts을 보면 아래와 같이 기본적으로 작성되어있다.
plugins {
id("org.springframework.boot") version "2.6.9"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
kotlin("jvm") version "1.6.21"
kotlin("plugin.spring") version "1.6.21"
}
각 플러그인 마다 버전이 명시되어 있고, 억지이긴 하지만 중복되는 버전(1.6.21)같은 내용도 있다. 이것을 다음과 같이 바꿔볼 예정이다
plugins {
id("org.springframework.boot")
id("io.spring.dependency-management")
kotlin("jvm")
kotlin("plugin.spring")
}
조금 더 깔끔해진 느낌이 든다. 이렇게 해도 제대로 돌아갈까? Gradle의 코끼리 새로고침(...)을 진행해보면 문제 없이 진행되는 것을 볼 수 있다. 여담이지만 이렇게 해보고 싶다는 생각이 든것은 다른 분의 코드를 보다가 이렇게 되어있어서 너무 깔끔해보이길래, 어떻게 하는지 알려달라고 했었고, 그때 바로 알려주시긴 했지만 역시 기록을 남기지 않으니 다 까먹게 되었다. 그래서 다시 이것저것 찾아보면서 기록을 남기게 된다.
gradle.properties 작성
먼저 해야할일은 버전을 한곳에서 관리할 곳을 만드는것이다. gradle.properties를 아래와 같이 작성하자 key값의 경우에는 원하는 대로 써도 된다.
applicationVersion=0.0.1
projectGroup=com.brown
kotlinVersion=1.6.21
# Spring dependency versions
springBootVersion=2.7.1
springDependencyManagementVersion=1.0.11.RELEASE
버전관리에 상관없는 내용도 있지만, 그룹 및 유동적으로 관리해야할 내용은 모두 넣어도 된다.
settings.gradle.kts 에 적용하기
gradle.properties를 작성하였으니 이것을 사용해보자. 먼저 build.gradle.kts의 버전을 다 삭제해 주자
plugins {
id("org.springframework.boot")
id("io.spring.dependency-management")
kotlin("jvm")
kotlin("plugin.spring")
}
그리고 build.gradle.kts와 동일한 위치에 있는 settings.gradle.kts을 열어 다음과 같이 입력하자
...
pluginManagement{
val kotlinVersion : String by settings
val springBootVersion : String by settings
val springDependencyManagementVersion : String by settings
resolutionStrategy{
eachPlugin {
when(requested.id.id){
"org.springframework.boot" -> useVersion(springBootVersion)
"io.spring.dependency-management" -> useVersion(springDependencyManagementVersion)
"org.jetbrains.kotlin.jvm","org.jetbrains.kotlin.plugin.spring" -> useVersion(kotlinVersion)
}
}
}
}
여기서 눈여겨 봐야할 곳은 pluginManagement 안에 작성된 부분인데 변수를 지정해주고 by settings를 사용한 곳이다
val kotlinVersion : String by settings
val springBootVersion : String by settings
val springDependencyManagementVersion : String by settings
변수이름은 앞서 gradle.properties에 작성한 key와 동일하게 입력해야한다. 다르게 입력한다면 값을 가져오지 못한다. 가져온 값을 가지고 아래의 resolutionStrategy의 eachPlugin을 통해 돌면서 id의 값을 찾아 userVersion을 통해 버전을 세팅해주는 코드이다. 이렇게 작성하고 나서 Gradle을 새로고침하게 되면 제대로 동작하게 된다.
여담이지만 build.gradle.kts에서 plugin의 내용중 id로 작성된곳이 아닌 kotlin으로 되어있는 것은 "org.jetbrains.kotlin"을 붙여주면 된다
kotlin("plugin.spring") --> org.jetbrains.kotlin.plugin.spring
build.gradle.kts에도 적용해보기
gradle.properties를 작성하면서 group과 applicationVersion도 입력한걸 볼 수 있다. 이 값은 build.gradle.kts에 적용해 볼 수 있다. 아래코드와 같이 사용하면 된다
val projectGroup : String by project
val applicationVersion : String by project
group = projectGroup
version = applicationVersion
repositories {
mavenCentral()
}
위에서 했던것과 조금 다른데 settings.gradle.kts에서는 by settings 여기서는 by project를 사용한다. 여기도 역시 gradle.properties에서 작성한 Key값과 동일하게 입력해 주어야한다.
왜 이렇게 사용해야할까?
하나의 프로젝트를 관리한다면 괜찮겠지만, 멀티모듈로 구성된 프로젝트가 있다고 한다면 이야기는 달라진다 각 모듈을 찾아다니면서 버전을 바꿔 주지 않고 gradle.properties를 사용하여 버전을 변경해주게 되면 멀티모듈로 구성된 모든 프로젝트에 버전을 적용시킬 수 있다. 응용해서 사용한다면 조금 더 깔끔하게 관리되지 않을까 생각한다.
'개발 > Kotlin' 카테고리의 다른 글
Spring Boot 멀티모듈 프로젝트 만들기[Kotlin, Gradle] (0) | 2023.01.16 |
---|---|
Kotlin - Enum 사용 (0) | 2022.07.22 |
TransactionalEventListener 그리고 EventListener (0) | 2022.07.12 |
Gradle - dependency-management Plugin (0) | 2022.06.19 |
QueryDSL 설정 - Kotlin (0) | 2022.06.19 |