Skip to content

Gradleビルドにおける「Unsupported class file major version 65」エラーの解決方法

問題概要

Java 21環境でGradleビルドを実行する際、以下のエラーが発生することがあります:

text
startup failed:
General error during conversion: Unsupported class file major version 65

java.lang.IllegalArgumentException: Unsupported class file major version 65
at groovyjarjarasm.asm.ClassReader.<init>(ClassReader.java:199)
...

このエラーは主に:

  • Java 21でコンパイルされたクラスファイルを、古いバージョンのJava実行環境が解釈しようとした場合
  • Gradleの内部コンポーネント(特にGroovyコンパイラ)がJava 21を完全にサポートしていない場合
  • プロジェクト設定と実行環境のJavaバージョンに不一致がある場合

に発生します。

典型的な事象として:

  1. gradle.propertiesでJava 21を指定するとエラー発生
  2. Java 17に切り替えると正常にビルド
  3. 再度Java 21に戻すとビルド成功 ← 一時キャッシュが影響

根本的な解決方法

1. GradleツールチェーンでJavaバージョン指定

最も推奨される方法で、プロジェクトのbuild.gradleに以下を追加:

groovy
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21) // プロジェクトのJavaバージョンを明確に指定
    }
}

利点:

  • プロジェクト固有のJavaバージョンを直接定義
  • ローカル環境に依存しないビルドが可能
  • 異なるバージョンのJDKが混在する状況を避けられる

2. ソース互換性の明示的な指定

build.gradleにJavaバージョンを明示:

groovy
java {
    sourceCompatibility = JavaVersion.VERSION_21
    targetCompatibility = JavaVersion.VERSION_21
}

注意点

sourceCompatibilitytargetCompatibilityの両方を設定することが重要です。片方のみでは不十分な場合があります。

3. Gradleキャッシュのクリア

環境変更後に以下のコマンドでキャッシュを削除:

bash
# 現在実行中のGradleデーモンを停止
./gradlew --stop

# プロジェクトのビルドキャッシュを削除
rm -rf .gradle build

# グローバルキャッシュを削除 (必要に応じて)
rm -rf ~/.gradle/caches

4. Gradleバージョンの更新

gradle-wrapper.propertiesで最新のGradleを使用(Java 21完全サポートは8.6以降):

properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip

注意

プロジェクトがAndroidの場合は、com.android.tools.build:gradleプラグインのバージョンも更新が必要です(後述)

5. 環境変数の整合性確認

システム全体のJava環境設定を確認:

bash
# 現在のJAVA_HOMEを確認
echo $JAVA_HOME

# Gradleが使用中のJavaバージョンを確認
./gradlew --version | grep "Java version"

問題のある例:

JAVA_HOME: /path/to/jdk-17
Gradleが使用: /path/to/jdk-21 → 不一致がエラーの原因

環境別の追加対応

Androidプロジェクトの場合

android/settings.gradlegradle-wrapper.propertiesを更新:

properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip
groovy
plugins {
    id "com.android.application" version "8.3.2" apply false
}

IntelliJ利用時の設定

  1. File > Project Structure
    • Project SDK: Java 21 設定
    • Project language level: 21
  2. Build, Execution, Deployment > Build Tools > Gradle
    • Gradle JVM: "Project SDK (Java 21)" を選択

回避策のリスク

groovy
// 非推奨な回避策(根本解決にならない)
sourceCompatibility = JavaVersion.VERSION_17 // 本来のバージョンより下げる

警告

Javaバージョンを意図的に下げる方法は一時的な回避策に留め、最新のJavaバージョンに対応した正しい解決方法を実装してください

補足:クラスファイルバージョン対応表

Javaバージョンclassファイルメジャーバージョン
Java 1761
Java 1862
Java 1963
Java 2064
Java 2165

永続的な解決のためのチェックリスト

  1. [ ] gradle-wrapper.propertiesでGradle 8.6以降を指定
  2. [ ] build.gradleでJavaツールチェーンを設定
  3. [ ] ソース互換性(VERSION_21)を明示的に指定
  4. [ ] システム環境変数JAVA_HOMEがJava 21を指している
  5. [ ] IDE設定がJava 21に統一されている
  6. [ ] 依存ライブラリがJava 21をサポートしている

最新のJavaバージョンへの移行には、ツールチェーンの適切な設定と環境全体の整合性確認が不可欠です。上記の解決方法を段階的に適用することで、「Unsupported class file major version 65」エラーを根本的に解決できます。