org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler 访问错误解决方案
问题描述
在添加 Firebase Database 依赖后,构建项目时出现以下关键错误:
log
java.lang.IllegalAccessError: superclass access check failed:
class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler (in unnamed module)
cannot access class com.sun.tools.javac.main.JavaCompiler (in module jdk.compiler)
因为模块 jdk.compiler 没有将 com.sun.tools.javac.main 导出给未命名模块
该错误是由于 Java 模块系统访问限制引起的,特别是:
- 使用新版本 JDK(如 Java 17/21)时
- Kapt(Kotlin注解处理器)尝试访问 JDK 内部未导出的类
- JDK 升级后增强了模块访问控制
推荐解决方案
1️⃣ 升级 Kotlin 版本(首选)
升级至 Kotlin 1.9.21+ 可从根本上解决问题(官方修复记录):
groovy
// 项目级 build.gradle
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23"
}
}
// 模块级 build.gradle
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.23"
}
2️⃣ 停止 Gradle 守护进程
在终端执行此命令清理旧进程:
bash
./gradlew --stop # macOS/Linux
gradlew --stop # Windows
3️⃣ 迁移至 KSP(Kotlin 符号处理器)
Google 官方推荐替代 kapt 的解决方案:
groovy
// 替换 kapt 插件
plugins {
id "com.google.devtools.ksp" version "1.9.23-1.0.19"
}
// 修改依赖
dependencies {
// kapt "com.example:processor" →
ksp "com.example:processor"
}
官方迁移指南: Migrate from kapt to KSP
其他应对方案
⚠️ 临时解决方法(JDK配置)
在 gradle.properties
中添加(兼容JDK 17):
properties
org.gradle.jvmargs=\
--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
-Dkotlin.daemon.jvm.options="--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED"
WARNING
此方案可能随着 JDK 升级而失效,建议作为临时措施
强制清理残留进程
- 查找并终止残留进程:
bash
jps | grep KotlinCompileDaemon | awk '{print $1}' | xargs kill -9
- Android Studio内解决方案:
Help > Check for Updates
- 若提示冲突进程,勾选
Kill processes
选项
预防措施
保持环境版本一致:
groovy// gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip // JDK配置 compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = '17' }
定期更新依赖:
groovy// 使用新版 Firebase BOM implementation(platform("com.google.firebase:firebase-bom:32.8.1"))
完整修复流程
- 升级 Kotlin 至
1.9.23
- 更新
gradle-wrapper.properties
至 Gradle8.6
- 执行
./gradlew --stop
- 在 Android Studio 中选择
File > Invalidate Caches / Restart
- 重新构建项目
若仍存在问题,考虑逐步移除第三方依赖进行排查