使用Iguana Beta版编译代码时遇superclass access check failed错误求助
解决Iguana Beta编译时的java.lang.IllegalAccessError问题
java.lang.IllegalAccessError: 超类访问检查失败:类org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler(位于未命名模块@0x603e2fc3)无法访问类com.sun.tools.javac.main.JavaCompiler(位于模块jdk.compiler),因为模块jdk.compiler未将com.sun.tools.javac.main导出到未命名模块@0x603e2fc3
可行解决方案:
- 降级到JDK 8:JDK 9及以上引入的模块系统限制了内部API的访问权限,Kapt在JDK 8环境下不会触发这类模块访问限制问题,直接切换JDK版本即可解决。
- 添加JVM参数开放模块访问:如果必须使用高版本JDK,在编译配置中添加以下参数,强制让
jdk.compiler模块把指定包导出到未命名模块:
Gradle项目中配置方式:--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
Groovy脚本(build.gradle):
Kotlin脚本(build.gradle.kts):tasks.withType(JavaCompile) { options.compilerArgs.add('--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED') } kapt { javacOptions { option('--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED') } }tasks.withType<JavaCompile> { options.compilerArgs.add("--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED") } kapt { javacOptions { option("--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED") } } - 升级Kotlin和Kapt版本:Iguana Beta可能与旧版Kotlin存在兼容性问题,尝试升级到最新稳定版Kotlin,新版本的Kapt大概率修复了高JDK环境下的模块访问问题。
内容的提问来源于stack exchange,提问作者Muzammil Hussain
相关产品推荐
相关产品推荐

