IllegalAccessError: 类 org.jetbrains.kotlin.kapt3.base.KaptContext Android 的访问非法

45

我已经多天以来一直遇到这样的错误,但是我找不到解决方法。你能帮忙吗?

问题可能是由什么引起的?

错误信息:

java.lang.IllegalAccessError: class org.jetbrains.kotlin.kapt3.base.KaptContext (in unnamed module @0x6acdb135) cannot access class com.sun.tools.javac.util.Context (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.util to unnamed module @0x6acdb135
    at org.jetbrains.kotlin.kapt3.base.KaptContext.<init>(KaptContext.kt:28)
    at org.jetbrains.kotlin.kapt3.KaptContextForStubGeneration.<init>(KaptContextForStubGeneration.kt:40)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.contextForStubGeneration(Kapt3Extension.kt:287)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:171)
    at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:102)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$invokeExtensionsOnAnalysisComplete(TopDownAnalyzerFacadeForJVM.kt:112)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:122)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:86)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:252)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:243)
    at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:113)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:243)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:90)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:56)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:92)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
    at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:412)
    at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:112)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:358)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:300)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:119)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:170)
    at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:81)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:607)
    at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:96)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1658)
    at jdk.internal.reflect.GeneratedMethodAccessor103.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
    at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
    at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)


Execution failed for task ':app:kaptGenerateStubsMacellanDebugKotlin'.
> Internal compiler error. See log for more details

这个回答解决了你的问题吗?Kapt在OpenJDK 16上无法正常工作 - a_local_nobody
不好意思,对我来说这些答案都没有起作用。@a_local_nobody - Nisa Efendioglu
啊,我猜你在问这个问题之前已经尝试过这些方法了。虽然这些方法看起来很相关,但我从未遇到过这种错误。希望你能得到答案。 - a_local_nobody
是的,我几乎尝试了谷歌上的所有答案:D 谢谢,希望@a_local_nobody能帮到我。 - Nisa Efendioglu
2
对我来说,我正在使用 Mac M1,以下答案有所帮助 https://dev59.com/2MPra4cB1Zd3GeqPd1QO#71319188 - Chetan Gaikwad
将Kotlin版本更新为1.6.0后,我的问题得到了解决。(在M1的macOS上) - Luis
7个回答

39

将 Kotlin Gradle 插件版本升级至 1.6.0+。当 Kotlin 版本为 1.6.0 或更高时,Kapt 可与 JDK 16+ 无缝配合使用。

classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21'

Gradle的Kotlin插件


它对我有效,谢谢。只是不要忘记清除缓存并重新启动。 - undefined

10

您可以通过切换Java版本到Java 15来解决此问题。如果您正在使用Intellij IDEA上的gradle,还需要在文件>设置>构建、执行、部署>构建工具>Gradle中更改Java版本。


3
这是我的问题(设置为JDK17而不是JDK11)。谢谢! - Mo Beigi
3
这对我有用!只是之后必须重新启动Android Studio。 - Micah Engle-Eshleman

3
我找到了解决办法并修复了这个麻烦的问题:D
我建议在根build.gradle中添加以下内容。这将强制在整个项目中使用给定的依赖项:
build.gradle(项目)
allprojects {
    configurations.all {
        resolutionStrategy {
            force 'org.xerial:sqlite-jdbc:3.34.0'
        }
    }
}

https://issuetracker.google.com/issues/174695268?pli=1#comment9 - Nisa Efendioglu
很遗憾,这个解决方案对我来说不起作用。 - undefined

2

我通过添加以下解决方法成功解决了这个问题:

org.gradle.jvmargs=-Xmx1536m --illegal-access=permit

添加到 gradle.properties 文件。


2
这对我来说是工作,而且我相信大多数人也是如此。
将Gradle版本更改为JDK17到JDK11或反之亦然。
如果仍然遇到问题,请尝试“清除缓存并重新启动”。

1

将JAVA_HOME切换到java 1.8并重新启动Android Studio后,问题得以解决。


1

添加

org.gradle.jvmargs=-Dfile.encoding=UTF-8 \
                   --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \
                   --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
                   --add-opens jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
                   --add-opens jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED  \
                   --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
                   --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
                   --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED

在 gradle-jdk 中使用 JDK-11 向 gradle.properties 文件添加。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接