LoginSignup
3
1

More than 1 year has passed since last update.

buildSrcでGradle7.6以降にKotlinバージョンのコンフリクトでエラーになる時の回避法

Last updated at Posted at 2023-03-09

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 のコンフリクトが起きていなければ遭遇しない問題ではあります。

参考

3
1
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
3
1