implementation(libs.ktor.server.core) って記法は何?
Ktor を試してみようと思い公式からサンプルをダウンロードしたところ、build.gradle.kts に implementation(libs.ktor.server.core)
のように依存関係が記載されてあった。
この表記方法を知らなかったため調べたところ Version Catalog を利用した表記とのことなので試してみた。
Version Catalog を使用するメリット
バージョンを gradle/libs.versions.toml
という一つのファイルで管理するため、一元管理ができる。
これは複数の build.gralde.kts が存在するような場合に便利。
gradle のドキュメントでは「依存関係の管理を簡素化できる」という記載もある。
Version Catalog を使用した形に書き換える
Version Catalog を使用した形にするには gradle/libs.versions.toml
で依存関係を記述し、build.gralde.kts では libs.*
で参照する。
libs.versions.toml で定義するエイリアス名は -
, _
, .
区切りのどれでもよいが、build.gradle.kts で参照する際は .
区切りに統一される。
(参照)https://docs.gradle.org/current/userguide/version_catalogs.html#sec:mapping-aliases-to-accessors
plugins {
kotlin("jvm") version "1.9.25"
kotlin("plugin.spring") version "1.9.25"
id("org.springframework.boot") version "3.4.4"
id("io.spring.dependency-management") version "1.1.7"
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
val lombokVersion = "1.18.22"
compileOnly("org.projectlombok:lombok:$lombokVersion")
annotationProcessor("org.projectlombok:lombok:$lombokVersion")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.8.1")
val kotlinxVersion = "1.8.1"
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor:$kotlinxVersion")
}
↓ Version Catalog を使用した形
[versions]
# 依存関係のバージョンを記載する
# ここで記載した内容を version.ref で参照することができる
kotlin-version = "1.9.25"
kotlinx-version = "1.6.0"
spring-plugin-version = "1.9.25"
spring-boot-version = "3.4.4"
spring-dependency-management-version = "1.1.7"
[libraries]
# build.gradle.kts の dependencies に記載する依存関係のエイリアスを定義する
# バージョンは version.ref で上記 versions で定義した値を参照することもできるし、version で直接記載することもできる
spring-boot-starter = { group = "org.springframework.boot", name = "spring-boot-starter", version.ref = "spring-boot-version" }
spring-boot-starter-test = { group = "org.springframework.boot", name = "spring-boot-starter-test", version.ref = "spring-boot-version" }
lombok = { module = "org.projectlombok:lombok", version = "1.18.22" }
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version = "1.8.1" }
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin-version" }
kotlin-test-junit5 = { group = "org.jetbrains.kotlin", name = "kotlin-test-junit5", version.ref = "kotlin-version" }
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-version" }
kotlinx-coroutines-reactor = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-reactor", version.ref = "kotlinx-version" }
[plugins]
# build.gradle.kts の plugins に記載するプラグインのエイリアスを定義する
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-version" }
spring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "spring-plugin-version" }
spring-boot = { id = "org.springframework.boot", version.ref = "spring-boot-version" }
spring-dependency-management = { id = "io.spring.dependency-management", version.ref = "spring-dependency-management-version" }
plugins {
// plugins の参照は alias(libs.plugins.*)
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.spring)
alias(libs.plugins.spring.boot)
alias(libs.plugins.spring.dependency.management)
}
dependencies {
// libraries の参照は libs.*
implementation(libs.spring.boot.starter)
implementation(libs.kotlin.reflect)
compileOnly(libs.lombok)
annotationProcessor(libs.lombok)
testImplementation(libs.spring.boot.starter.test)
testImplementation(libs.kotlin.test.junit5)
testRuntimeOnly(libs.junit.platform.launcher)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.reactor)
}
所感
build.gradle.kts はかなりスッキリするように見える。
バージョンの変更についても libs.versions.toml を修正するだけで済むので良さそう。
ただ、build.gradle.kts が 1 つしかないのであれば Version Catalog を使用しない形のほうがシンプルで十分だと感じた。