You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

运行Kotlin应用时遭遇java.lang.IllegalAccessError错误求助

运行Kotlin应用时遭遇java.lang.IllegalAccessError错误求助

嘿,我碰到过类似的问题,这个错误本质是Kapt(Kotlin注解处理工具)和你当前使用的JDK版本不兼容导致的——JDK 9及以上引入了模块系统,而旧版Kapt没有适配这个系统,无法访问JDK内部被模块保护的com.sun.tools.javac.main包。

先把你遇到的错误信息整理出来:

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

对应的部分栈轨迹:

at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/...(你提供的内容未完整,可补充完整栈信息方便进一步排查)

下面是几个靠谱的解决办法:

  • 优先升级Kotlin和Kapt版本:这是最彻底的方案。如果你的项目用了JDK 11+,建议把Kotlin版本升级到1.5.0及以上(最新稳定版更好),这些版本已经适配了JDK模块系统。修改项目的build.gradle(或build.gradle.kts):

    plugins {
        id 'org.jetbrains.kotlin.jvm' version '1.9.20' // 替换为兼容的最新稳定版
        id 'kotlin-kapt' version '1.9.20'
    }
    

    同步项目后重新编译运行,大概率能解决问题。

  • 临时添加JVM参数(应急方案):如果暂时没法升级版本,可以在应用的运行配置里添加以下JVM参数,强制让JDK模块暴露需要的包给未命名模块:

    --add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
    

    注意这只是临时 workaround,长期不推荐,因为后续JDK版本可能会限制这类参数的使用。

  • 检查依赖是否误用内部API:确认你的项目或第三方依赖有没有直接引用com.sun.tools.javac.main这类JDK内部包,这类包属于非公开API,本来就不应该被外部代码调用,升级Kapt版本后会用规范的方式替代这类调用。

备注:内容来源于stack exchange,提问作者darknessww

火山引擎 最新活动