Skip to content

Kotlin JVM ターゲット設定エラーの解決方法

問題概要

Flutterプロジェクトでflutter build apkを実行した際に発生するビルドエラー:

FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':nb_utils:compileReleaseKotlin'.
> Unknown Kotlin JVM target: 21

このエラーは、Kotlinコンパイラが指定されたJVMターゲットバージョン(21)を認識できない場合に発生します。主な原因として:

  • KotlinプラグインのバージョンがJava 21をサポートしていない
  • nb_utilsモジュールがJava 21ターゲットを要求している
  • プロジェクト設定でJVMターゲットが明示的に定義されていない

解決方法

基本対応: build.gradle の修正

android/app/build.gradle ファイルを開き、以下の設定を追加します。

gradle
android {
    // ...既存の設定...

    // 以下のブロックを追加
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8' // Java 8をターゲットに指定
    }
}

重要なポイント

  • JavaVersion.VERSION_1_8jvmTarget = '1.8' は一致させる必要があります
  • 既存のcompileOptionskotlinOptionsがある場合は置き換え

モジュール固有の対応: nb_utils設定

依存モジュールnb_utilsが原因の場合、そのビルド設定ファイルを修正します。

  1. android/ ディレクトリでnb_utilsモジュールを検索
  2. モジュールの build.gradle を開く
  3. 同様の設定を追加:
gradle
android {
    // ...既存の設定...

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }
}

高度な設定: 最新バージョン対応

Android Studioの最新版で作業している場合、Java 17ターゲットが有効(2025年1月以降のプロジェクト推奨):

gradle
android {
    // ...既存の設定...

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = '17'
    }
}
gradle
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
plugins {
    id "com.android.application" version "8.3.2" apply false
    id "org.jetbrains.kotlin.android" version "2.0.20" apply false
}

Gradleラッパー更新(オプション)

gradle/wrapper/gradle-wrapper.propertiesを編集:

properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip

エラー発生のメカニズム

このエラーが発生する根本原因:

  1. AndroidモジュールがJava/Kotlinバージョンを宣言していない
  2. 依存ライブラリが新しいJVMバージョンを要求
  3. Kotlinコンパイラが未サポートのバージョンを検出
モジュール依存関係
flutter_app 

└───nb_utils (JVMターゲット21を要求)

     └───kotlin-compiler (JVM 21を認識できない)

予防策

  • プロジェクト初期設定: 新規プロジェクト作成時にcompileOptionskotlinOptionsを必ず設定
  • 依存ライブラリ確認: 使用ライブラリがサポートするJavaバージョンを確認
  • Android Studio更新: GradleプラグインとKotlinプラグインの互換性を維持

よくある質問

Q. Java 1.8とJava 17のどちらを選ぶべきですか?

A. プロジェクトの要件によります

  • レガシーなライブラリ使用 → Java 1.8
  • 新規プロジェクト → Java 17推奨
  • Flutter関連ライブラリ → 公式ドキュメントで互換性を確認
Q. 設定変更後もエラーが消えない場合は?

以下の手順を試してください:

  1. 完全クリーンビルド実行:
    bash
    flutter clean
    rm -rf android/build
    ./gradlew clean
  2. 依存関係のキャッシュ削除:
    bash
    rm -rf ~/.gradle/caches
  3. invalidate caches / restartをAndroid Studioで実行

参考リソース