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コンパイラ内部クラスへアクセスしようとして失敗する際に発生します。主な原因は:
- JDKのモジュールシステム制約
- KotlinバージョンとJDKバージョンの非互換性
- キャッシュされたGradle/Kotlinデーモンプロセス
- 古くなった依存関係
次に具体的な解決策を解説します。
恒久的解決策: Kotlinバージョンの更新
この問題はKotlin 1.9.21以降で修正されています。プロジェクト全体でKotlinバージョンを更新しましょう。
プロジェクトレベルの更新 (build.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
):
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のデーモンの再起動が効果的です。
- ターミナルでプロジェクトルートに移動
- 以下のコマンドを実行:
# Windows/Linux/macOS共通
./gradlew --stop
# Windows PowerShellの場合
Stop-Process -Name "KotlinCompileDaemon" -Force
- Android Studioで
Build > Clean Project
を実行 - 再ビルド
注意
Android Studio使用中はFile > Invalidate Caches...
オプションも併用してください。「Invalidate and Restart」を選択すると全キャッシュがクリアされます。
JDKバージョンの設定確認
Kotlin 1.9.xはJDK 17を公式サポートしています。設定を確認しましょう。
app/build.gradle
でのJDK設定:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
}
システム環境の確認:
# ターミナルで実行
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
環境変数を確認:
# 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自体のアップデートで解決するケースもあります(特に新しいマシンでプロジェクトを開いた場合)。
Help > Check for Updates
- 更新があれば適用
- JDKプロセスの競合が報告された場合、「Proceed」で終了
Navigation Safe Argsプラグインの更新
Firebase Database導入前に動作していたプロジェクトでは、Navigationコンポーネントが原因の場合があります。
// プロジェクトの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
に設定追加する方法もあります。
org.gradle.jvmargs=--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
非推奨の注意
この方法はモジュールアクセス制限を一時的に無視するもので、長期的な解決策ではありません。Javaの将来バージョンでサポートされなくなる可能性があります。
予防策: KaptからKSPへの移行
Androidチームはkaptの代わりにKSP (Kotlin Symbol Processing) を推奨しています。中長期的にエラーを防ぐには移行が有効です。
移行ステップ:
app/build.gradle
からkapt
プラグインを削除
plugins {
// id 'kotlin-kapt' を削除
}
- KSPプラグインを追加
plugins {
id "com.google.devtools.ksp" version "1.9.23-1.0.20"
}
- 依存関係を
kapt
からksp
に変更
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のバージョン不一致です。最新ツールチェインの使用を心がけましょう。