Skip to content

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

問題の説明

AndroidプロジェクトでGradleビルドを実行すると、以下のようなエラーが発生することがあります:

ERROR: 'compileJava' task (current target is 11) and 'compileKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version.

このエラーは、JavaコンパイルタスクとKotlinコンパイルタスクのJVMターゲットバージョンが一致していないことを示しています。Android StudioのバージョンアップやGradleのアップデート後に発生することが多い問題です。

解決策

1. 基本的な設定方法

Androidモジュールのbuild.gradle.ktsファイルで、以下のようにcompileOptionskotlinOptionsを同じバージョンに設定します:

kotlin
android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    
    kotlinOptions {
        jvmTarget = "11"
    }
}

重要

エラーメッセージに表示されているバージョン番号を確認してください。エラーが「17」を示している場合は、VERSION_11の代わりにVERSION_17を使用する必要があります。

2. 非Androidモジュールの場合

Java/Kotlinライブラリモジュールなど、Androidプラグインを使用していないモジュールでは、以下のように設定します:

kotlin
plugins {
    `java-library`
    kotlin("jvm")
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        jvmTarget = "11"
    }
}

3. 最新の推奨方法 (Kotlin 1.8+)

Kotlin 1.8以降では、jvmToolchainを使用する方法が推奨されています:

kotlin
kotlin {
    jvmToolchain(11)
}

この方法は、JavaコンパイルとKotlinコンパイルの両方のターゲットバージョンを一度に設定します。

モジュール間の整合性

マルチモジュールプロジェクトでは、すべてのモジュールで同じJVMターゲットバージョンを使用する必要があります。メインプロジェクトと各モジュールのbuild.gradle.ktsファイルで設定が一致していることを確認してください。

注意

モジュールによって異なるバージョンが設定されていると、ビルドエラーが発生する可能性があります。

kaptを使用している場合の特別な対応

kapt (Kotlin Annotation Processing Tool) を使用している場合、追加の設定が必要になることがあります:

kotlin
import org.jetbrains.kotlin.gradle.tasks.KaptGenerateStubs

tasks.withType<KaptGenerateStubs> {
    kotlinOptions {
        jvmTarget = "11"
    }
}

トラブルシューティング

バージョン番号の表記について

Javaバージョンの表記方法に注意してください:

kotlin
// 正しい表記
JavaVersion.VERSION_11  // Java 11
JavaVersion.VERSION_17  // Java 17

// 間違った表記(意味が異なります)
JavaVersion.VERSION_1_9  // Java 9(非推奨)

Gradleのバージョン互換性

GradleとJavaのバージョン互換性に問題がある場合、以下のような対応が必要です:

  1. 使用しているGradleバージョンに適したJavaバージョンを選択する
  2. 必要に応じてGradleバージョンをダウングレードする
GradleとJavaのバージョン互換性表
Gradleバージョン対応するJavaバージョン
8.0+17+
7.0-7.511-17
6.0-6.98-14

警告を無効にする方法(非推奨)

どうしても解決できない場合、一時的な対策として警告を無効にすることができます:

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

注意

これは根本的な解決ではなく、あくまで一時的な回避策です。可能な限り正しいバージョン設定を行うことをお勧めします。

まとめ

JVMターゲット互換性エラーを解決するには:

  1. エラーメッセージで表示されている実際のバージョンを確認する
  2. すべてのモジュールでcompileOptionskotlinOptionsを同じバージョンに設定する
  3. 可能であれば最新のjvmToolchainメソッドを使用する
  4. マルチモジュールプロジェクトでは全モジュールの設定を確認する
  5. kaptを使用している場合は追加の設定が必要な場合がある

これらの手順に従うことで、JVMターゲットの互換性エラーを解決し、安定したビルド環境を構築できます。