Kotlin のプロジェクトに version catalog を導入する
概要
本記事では、Kotlin のプロジェクトに version catalog を導入する方法を記載します。
version catalog について
version catalog は gradle の機能の 1 つです。
build.gradle.kts に記載する package やバージョンを ./gradle/libs.versions.toml
に記載し、参照するようにします。
導入することで以下のメリットがあります。
- IDE サポートが受けられる
- マルチモジュールプロジェクトで複数の build.gradle.kts を記載するときに管理する箇所が 1 つになる
- 複数の package のバージョンを同期させる必要がある(ex: kotlin と spring plugin、dekete の plugin と dependencies)場合でも一元化できる
本記事では、1 つめと 3 つめのメリットを後述する導入手順で確認します。
具体的な導入手順や、紹介します。
version catalog を導入
準備
Kotlin のプロジェクトのため、Intellij IDEA を利用します。
下記のコードを拡張機能をインストールしてください。
- Kotlin
- Gradle Version Catalogs
プレーンな Kotlin のプロジェクトに導入する
まずは、導入のため、簡単な Kotlin のプロジェクトに対して、Kotlin のバージョンを version catalog に移行します。
本項で作成したリポジトリのリンクは以下です。
以下の画像のように、Intellij IDEA で新規プロジェクトを作成してください。
Kotiln プロジェクトを新規作成
続いて、./gradle/libs.versions.toml
を作成します。
別の名前を利用する場合は、settings.gradle.kts
に設定を書き加える必要がありますが、デフォルトではこの名前で呼び出されます。
作成したファイルに以下のように記述してください。
以下の設定では Kotlin のバージョンを指定しています。
[versions]
kotlin = "1.9.22"
[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
これを、build.gradle.kts
において呼び出します。
plugins
で指定している箇所を、下記のように書き換えてください。
plugins {
alias(libs.plugins.kotlin.jvm)
}
gradle が build する前は IDE 上ではコンパイルできないと指摘されます。
警告を無視して build して失敗した場合に対応するか、先に build.gradle.kts を書き換える前に gradle を読み込むことで build できるか確認できます。
version catalog の指定でビルドエラーが検出されている
読み込みに成功すると、下記のように表示されます。
先述した拡張機能 Gradle Version Catalogs をインストールしておくと、利用しているバージョンが判明したり、コードジャンプで libs.versions.toml に飛べます。
version catalog の読み込みに成功
このようにして、version catalog の指定を toml ファイルに移行できました。
Spring Boot のプロジェクトに導入する
Spring Boot のプロジェクトに、version catalog を導入します。
本項で作成したリポジトリは以下です。
まずは、以下のように Spring Initializr でプロジェクトを作成します。
Spring Initializr
下記のリンクからも生成できます。
先述記述したように、./gradle/libs.versions.toml
を作成します。
build.gradle.kts に記述した場合は、手動で kotlin-jvm と kotlin-plugin-spring の箇所を更新させる必要があります。
一方で、version catalog の場合は versons に記載した kotlin のバージョンを更新するだけで済みます。
このように version catalog によって、同期させるバージョンの管理が楽になります。
[versions]
kotlin = "1.9.22"
spring-boot-version = "3.2.5"
spring-boot-management = "1.1.4"
[libraries]
spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web" }
spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test" }
jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin" }
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect" }
[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-plugin-spring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlin" }
spring-boot = { id = "org.springframework.boot", version.ref = "spring-boot-version" }
spring-dependencymanager = { id = "io.spring.dependency-management", version.ref = "spring-boot-management" }
build.gradle.kts でこれらを参照するように記述します。
plugins {
alias(libs.plugins.spring.boot)
alias(libs.plugins.spring.dependencymanager)
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.kotlin.plugin.spring)
}
dependencies {
implementation(libs.spring.boot.starter.web)
implementation(libs.jackson.module.kotlin)
implementation(libs.kotlin.reflect)
testImplementation(libs.spring.boot.starter.test)
}
gradle を読み込んで、build が通ったら完了です。
Discussion