You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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

有时候缓存损坏也会导致这类奇怪的类找不到问题:

  1. 执行清理命令:
    gradlew clean assembleRelease --no-build-cache
    
  2. 杀掉后台的Kotlin Daemon进程,避免旧进程干扰:
    • Windows:打开命令提示符输入 taskkill /F /IM kotlin-daemon.exe
    • macOS/Linux:终端输入 pkill kotlin-daemon
  3. 重新运行构建命令。

四、检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:26:51