Skip to content

Kotlinコンパイル時のIllegalAccessError解決法

問題説明

Firebase Realtime Databaseの依存関係を追加した後、Kotlinプロジェクトのビルド中に以下のエラーが発生する場合があります:

java.lang.IllegalAccessError: superclass access check failed: class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler [...] cannot access class com.sun.tools.javac.main.JavaCompiler [...] because module jdk.compiler does not export com.sun.tools.javac.main to unnamed module

このエラーは、Kotlinのkapt(Kotlin Annotation Processing Tool)がJavaコンパイラ内部クラスへアクセスしようとして失敗する際に発生します。主な原因は:

  1. JDKのモジュールシステム制約
  2. KotlinバージョンとJDKバージョンの非互換性
  3. キャッシュされたGradle/Kotlinデーモンプロセス
  4. 古くなった依存関係

次に具体的な解決策を解説します。


恒久的解決策: Kotlinバージョンの更新

この問題はKotlin 1.9.21以降で修正されています。プロジェクト全体でKotlinバージョンを更新しましょう。

プロジェクトレベルの更新 (build.gradle):

gradle
buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23"
    }
}

plugins {
    id 'org.jetbrains.kotlin.android' version '1.9.23' apply false
}

モジュールレベルの更新 (app/build.gradle):

gradle
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.23"
    implementation "org.jetbrains.kotlin:kotlin-reflect:1.9.23"
}

最新バージョン確認

Kotlinの最新バージョンは公式サイトで確認できます。2025年7月時点では1.9.23が最新です。


即効的な対処法: Gradleデーモンの停止

バージョン変更後、または急ぎで解決したい場合は、Gradle/Kotlinのデーモンの再起動が効果的です。

  1. ターミナルでプロジェクトルートに移動
  2. 以下のコマンドを実行:
bash
# Windows/Linux/macOS共通
./gradlew --stop

# Windows PowerShellの場合
Stop-Process -Name "KotlinCompileDaemon" -Force
  1. Android StudioでBuild > Clean Projectを実行
  2. 再ビルド

注意

Android Studio使用中はFile > Invalidate Caches...オプションも併用してください。「Invalidate and Restart」を選択すると全キャッシュがクリアされます。


JDKバージョンの設定確認

Kotlin 1.9.xはJDK 17を公式サポートしています。設定を確認しましょう。

app/build.gradleでのJDK設定:

gradle
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    
    kotlinOptions {
        jvmTarget = '17'
    }
}

システム環境の確認:

bash
# ターミナルで実行
java --version

# 期待される出力例
openjdk 17.0.11 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9)
OpenJDK 64-Bit Server VM (build 17.0.11+9, mixed mode)

JDK切り替え方法

複数のJDKがインストールされている場合、JAVA_HOME環境変数を確認:

bash
# macOS/Linux
export JAVA_HOME=`/usr/libexec/java_home -v 17`

# Windows
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk-17", "User")

Android Studioのアップデート

Android Studio自体のアップデートで解決するケースもあります(特に新しいマシンでプロジェクトを開いた場合)。

  1. Help > Check for Updates
  2. 更新があれば適用
  3. JDKプロセスの競合が報告された場合、「Proceed」で終了

更新プロセスでの確認画面


Firebase Database導入前に動作していたプロジェクトでは、Navigationコンポーネントが原因の場合があります。

gradle
// プロジェクトのbuild.gradle
dependencies {
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.8.2"
}

// モジュールのbuild.gradle
dependencies {
    implementation "androidx.navigation:navigation-fragment-ktx:2.8.2"
    implementation "androidx.navigation:navigation-ui-ktx:2.8.2"
}

代替解決法 (一時的対策)

すぐにKotlinバージョンを変えられない場合は、gradle.propertiesに設定追加する方法もあります。

properties
org.gradle.jvmargs=--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED

非推奨の注意

この方法はモジュールアクセス制限を一時的に無視するもので、長期的な解決策ではありません。Javaの将来バージョンでサポートされなくなる可能性があります。


予防策: KaptからKSPへの移行

Androidチームはkaptの代わりにKSP (Kotlin Symbol Processing) を推奨しています。中長期的にエラーを防ぐには移行が有効です。

移行ステップ:

  1. app/build.gradleからkaptプラグインを削除
gradle
plugins {
    // id 'kotlin-kapt' を削除
}
  1. KSPプラグインを追加
gradle
plugins {
    id "com.google.devtools.ksp" version "1.9.23-1.0.20"
}
  1. 依存関係をkaptからkspに変更
gradle
dependencies {
    // kapt 'com.google.dagger:dagger-compiler:2.50'
    ksp 'com.google.dagger:dagger-compiler:2.50'
}

公式移行ガイドで詳細を確認できます。


まとめ

このエラーを解決する優先順位は: 1️⃣ Kotlinバージョンを1.9.21以上に更新
2️⃣ ./gradlew --stopでデーモンを再起動
3️⃣ JDK 17を使用しているか確認
4️⃣ Android Studioと関連プラグインを最新版に更新

Firebase導入時の発生が多いですが、根本原因はKotlin/JDKのバージョン不一致です。最新ツールチェインの使用を心がけましょう。