
はじめに
Gradle のバージョンカタログでは、ライブラリのバージョンなどが一元管理できるが、コンベンションプラグイン(Convention Plugin) 側では、定義したカタログが利用できない。
以下のバージョンカタログ定義を行っても
[versions] junit = "6.1.0" [libraries] junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
buildSrc\src\main\kotlin\buildlogic.java-common-conventions.gradle.kts で以下のような定義はできない。
dependencies {
testImplementation(libs.junit)
// ...
}
Make generated type-safe version catalogs accessors accessible from precompiled script plugins #15383 で Issue として挙げられているが、例によって、すぐに対応される望みは薄い。
ワークアラウンド
ワークアラウンドとして以下のハックで対応できる。
buildSrc\build.gradle.kts に implementation でバージョンカタログ定義を追加する。
plugins {
`kotlin-dsl`
}
repositories {
gradlePluginPortal()
}
dependencies {
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
}
buildSrc\src\main\kotlin\ProjectExt.kt として以下を作成する。
import org.gradle.api.Project import org.gradle.kotlin.dsl.the val Project.libs get() = the<org.gradle.accessors.dm.LibrariesForLibs>()
これで buildSrc\src\main\kotlin\buildlogic.java-common-conventions.gradle.kts で以下のような定義が可能となる。
dependencies {
testImplementation(libs.junit)
// ...
}
ProjectExt.kt を作成しない場合は以下のようにすることもできる。
val libs = the<org.gradle.accessors.dm.LibrariesForLibs>() dependencies { testImplementation(libs.junit) // ... }