0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gradle Version Catalog を試してみる

Posted at

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

修正前の build.gradle.kts (一部抜粋)
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 を使用した形

gradle/libs.versions.toml
[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" }
build.gradle.kts (一部抜粋)
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 を使用しない形のほうがシンプルで十分だと感じた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?