Skip to content

JVMターゲット互換性エラーの解決法

Flutterプロジェクトにおいて「Inconsistent JVM-target compatibility detected」エラーが発生する場合、JavaとKotlinのコンパイル設定で異なるJVMバージョンが指定されていることが主な原因です。この問題は依存関係の更新後に頻発し、以下のようなエラーメッセージが表示されます:

bash
* What went wrong:
Execution failed for task ':flutter_google_places_sdk_android:compileDebugKotlin'.
> Inconsistent JVM-target compatibility detected for tasks 'compileDebugJavaWithJavac' (1.8) and 'compileDebugKotlin' (17).

根本原因と解決アプローチ

エラーは主に以下の不一致によって発生します:

  1. Javaコンパイル (compileJavaWithJavac) と Kotlinコンパイル (compileKotlin) のJVMターゲットバージョン不一致
  2. サードパーティライブラリの設定がプロジェクト全体の設定と競合
  3. Gradle/Kotlinプラグインのバージョン互換性問題

確実な解決方法

方法1: 設定の統一(推奨)

android/app/build.gradle でJavaとKotlinのJVMターゲットを一致させます:

gradle
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = '17' // 文字列で指定
    }
}

方法2: JVM Toolchainの明示的指定

Gradleのツールチェーン機能でJDKバージョンを固定:

gradle
kotlin {
    jvmToolchain(17) // JDKバージョンを直接指定
}

注意点

  • Android Gradle Plugin (AGP) 8.1.0-alpha09以降が必要
  • jvmToolchain 設定は kotlinOptions より優先されます

方法3: 問題のあるライブラリの個別設定

エラーが特定ライブラリから発生する場合:

gradle
project(':問題のライブラリ名').afterEvaluate {
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
        }
        kotlinOptions {
            jvmTarget = '17'
        }
    }
}

一時的な回避策(非推奨)

緊急時のみgradle.propertiesで検証を無効化:

properties
# gradle.properties
kotlin.jvm.target.validation.mode = IGNORE

注意

この設定は根本解決ではなく、将来の互換性問題を引き起こす可能性があります


バージョン互換性の確認ポイント

  1. GradleとKotlinの互換性

  2. JDKインストールバージョンの整合性

    bash
    java -version # ターミナルで確認
    • Android StudioのJDK設定(File > Project Structure)
    • 環境変数 JAVA_HOME の設定
  3. マルチモジュール対応

    • build.gradle ファイルで設定を統一
    • サブモジュール設定例:
      gradle
      // ルートbuild.gradle
      allprojects {
          tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
              kotlinOptions.jvmTarget = "17"
          }
      }

完全動作例 (Gradle 8.4 + Kotlin 1.9.20)

gradle
// android/build.gradle
dependencies {
    classpath 'com.android.tools.build:gradle:8.4.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20"
}

// android/app/build.gradle
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = '17'
    }
}
kotlin {
    jvmToolchain(17) // 推奨設定
}
properties
# gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip

検証チェックリスト

  1. 全モジュールの sourceCompatibility/jvmTarget 値の一致確認
  2. gradle.propertieskotlin.jvm.target.validation.mode=IGNORE が残っていないか
  3. Android StudioのJDK設定とターミナルの java -version 一致確認
  4. サードパーティライブラリの最新バージョン使用(特に問題の発生時期に修正済みか)

これらの対策でエラーが解決しない場合は、Kotlin公式のターゲット検証ガイドを参照してください。