Android の buildSrc (自分の手元では Precompiled script plugin) を使っているプロジェクトで Gradle 7.6 以降に更新しようとしたところビルドエラーが出たのでその原因と回避法のメモ。
環境
Gradle 7.5.1 では問題なくビルドができており、 buildSrc/build.gradle.kts
は以下のような設定でした。
plugins {
kotlin("jvm") version libs.versions.kotlin.get()
kotlin("plugin.serialization") version libs.versions.kotlin.get()
`kotlin-dsl`
`kotlin-dsl-precompiled-script-plugins`
}
dependencies {
...
}
起きるエラーのログは↓で、Kotlin のバージョンのコンフリクトが起きている模様。
A problem occurred configuring project ':buildSrc'.
> Could not resolve all files for configuration ':buildSrc:classpath'.
> Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.10.
Required by:
project :buildSrc > org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.8.10 > org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.10
> Multiple incompatible variants of org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.10 were selected:
- Variant org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.10 variant gradle70RuntimeElements has attributes {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.plugin.api-version=7.0, org.gradle.status=release, org.gradle.usage=java-runtime}
- Variant org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.8.10 variant gradle76RuntimeElements has attributes {org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.jvm.environment=standard-jvm, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.plugin.api-version=7.6, org.gradle.status=release, org.gradle.usage=java-runtime}
原因と解決策
原因は kotlin("jvm")
や kotlin("plugin.serialization")
で指定している Kotlin のバージョン(1.8.10)と、kotlin-dsl
で使用される組み込みの Kotlin バージョン(1.7.10)がコンフリクトしているためでした。
これを解決するには kotlin-dsl
の Kotlin のバージョンに揃える必要があり、embeddedKotlinVersion
を使って揃えることで解決することができます。
plugins {
kotlin("jvm") version embeddedKotlinVersion
kotlin("plugin.serialization") version embeddedKotlinVersion
`kotlin-dsl`
`kotlin-dsl-precompiled-script-plugins`
}
dependencies {
...
}
ちなみに kotlin("jvm")
や kotlin("plugin.serialization")
を使って Kotlin のバージョンがコンフリクトしていたために起きた問題で、もちろん指定していなくて Kotlin のコンフリクトが起きていなければ遭遇しない問題ではあります。