执行gradlew assembleRelease报错:缺失com.sun.tools.javac.util.Context类
解决
gradlew assembleRelease报错com.sun.tools.javac.util.Context找不到的问题 我知道你已经试过了那个类似问题里的所有解决方案但都没效果,那咱们来排查一些容易被忽略的点,试试下面这些方案:
一、确认JDK版本与插件兼容性
这个错误核心是Kotlin编译器找不到tools.jar——而从JDK 9开始,Oracle JDK和OpenJDK都移除了这个文件,老版本的Kotlin Gradle插件对JDK 11+的支持并不友好:
- 如果你当前用的是JDK 11或更高版本,要么升级Kotlin插件到最新稳定版(比如1.9.x系列),要么临时降级到JDK 8来构建发布包。
- 检查项目的
gradle.properties,确保org.gradle.java.home指向的是完整JDK路径(不是JRE),示例配置:org.gradle.java.home=C:/Program Files/Java/jdk1.8.0_301
二、强制给Kotlin编译指定JDK路径
在你app模块的build.gradle中添加如下配置,让Kotlin编译器明确使用兼容的JDK:
android { // ...其他配置 kotlinOptions { // 可以直接写JDK8的绝对路径,或者用环境变量 jdkHome = System.getenv("JAVA_HOME") // 额外指定JVM目标版本,避免版本不匹配 jvmTarget = "1.8" } }
同时在项目根目录的build.gradle里确保Kotlin插件是最新版:
buildscript { ext.kotlin_version = "1.9.20" repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.4.2" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
三、彻底清理Gradle缓存与Kotlin Daemon
有时候缓存损坏也会导致这类奇怪的类找不到问题:
- 执行清理命令:
gradlew clean assembleRelease --no-build-cache - 杀掉后台的Kotlin Daemon进程,避免旧进程干扰:
- Windows:打开命令提示符输入
taskkill /F /IM kotlin-daemon.exe - macOS/Linux:终端输入
pkill kotlin-daemon
- Windows:打开命令提示符输入
- 重新运行构建命令。
四、检查Gradle版本是否匹配
Gradle版本和Kotlin插件版本不兼容也可能触发这个问题:
- 打开
gradle/wrapper/gradle-wrapper.properties,把distributionUrl升级到和Kotlin插件匹配的版本,比如Kotlin 1.9.x建议用Gradle 7.5+:distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
附上你遇到的错误日志:
Caught an exception trying to connect to Kotlin Daemon java.lang.ClassNotFoundException: com.sun.tools.javac.util.Context at java.base/java.net.URLClassLoader.findClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at org.jetbrains.kotlin.gradle.tasks.JarSearchingUtilKt.findToolsJar(jarSearchingUtil.kt:79) at org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment$toolsJar$2.invoke(GradleCompilerEnvironment.kt:20) at org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment$toolsJar$2.invoke(GradleCompilerEnvironment.kt:14) at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:130) at org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment.getToolsJar(GradleCompilerEnvironment.kt) at org.jetbrains.kotlin.compilerRunner.GradleCompilerEnvironment.getCompilerFullClasspath(GradleCompilerEnvironment.kt:23) at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.getDaemonConnection(GradleKotlinCompilerRunner.kt:336) at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.compileWithDaemon(GradleKotlinCompilerRunner.kt:181) at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.compileWithDaemonOrFallback(GradleKotlinCompilerRunner.kt:156) at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.compileWithDaemonOrFallback(GradleKotlinCompilerRunner.kt:53) at org.jetbrains.kotlin.compilerRunner.KotlinCompilerRunner.runCompiler(KotlinCompilerRunner.kt:127) at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.runJvmCompiler(GradleKotlinCompilerRunner.kt:108) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompiler$kotlin_gradle_plugin(Tasks.kt:378) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompiler$kotlin_gradle_plugin(Tasks.kt:253) at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.execute(Tasks.kt:215) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmpty
内容的提问来源于stack exchange,提问作者Foobar
相关产品推荐
相关产品推荐

