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).
根本原因と解決アプローチ
エラーは主に以下の不一致によって発生します:
- Javaコンパイル (
compileJavaWithJavac
) と Kotlinコンパイル (compileKotlin
) のJVMターゲットバージョン不一致 - サードパーティライブラリの設定がプロジェクト全体の設定と競合
- 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
注意
この設定は根本解決ではなく、将来の互換性問題を引き起こす可能性があります
バージョン互換性の確認ポイント
GradleとKotlinの互換性
- 公式互換性マトリックスで確認
- 例:Kotlin 1.9.x → Gradle 8.1~8.4推奨
JDKインストールバージョンの整合性
bashjava -version # ターミナルで確認
- Android StudioのJDK設定(File > Project Structure)
- 環境変数
JAVA_HOME
の設定
マルチモジュール対応
- 全
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
検証チェックリスト
- 全モジュールの
sourceCompatibility
/jvmTarget
値の一致確認 gradle.properties
にkotlin.jvm.target.validation.mode=IGNORE
が残っていないか- Android StudioのJDK設定とターミナルの
java -version
一致確認 - サードパーティライブラリの最新バージョン使用(特に問題の発生時期に修正済みか)
これらの対策でエラーが解決しない場合は、Kotlin公式のターゲット検証ガイドを参照してください。