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

Windows下执行gradlew损坏缓存触发Kotlin编译NoClassDefFoundError报错

问题描述
  • 现有一个编译目标为Java字节码的Kotlin项目,原本通过IntelliJ可以正常构建、运行
  • 在Windows系统命令行进入项目根目录执行gradlew clean或gradlew build命令时,抛出如下错误:
e: java.lang.NoClassDefFoundError: Could not initialize class org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel
        at org.jetbrains.kotlin.com.intellij.core.CoreLanguageLevelProjectExtension.<init>(CoreLanguageLevelProjectExtension.java:26)
        at org.jetbrains.kotlin.com.intellij.core.JavaCoreProjectEnvironment.<init>(JavaCoreProjectEnvironment.java:42)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment.<init>(KotlinCoreProjectEnvironment.kt:26)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$ProjectEnvironment.<init>(KotlinCoreEnvironment.kt:121)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:425)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.createCoreEnvironment(K2JVMCompiler.kt:226)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:152)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88)
        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:386)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:110)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:286)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:99)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:114)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:74)
        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:1659)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:577)
        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:598)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720)
        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)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.ExceptionInInitializerError [in thread "RMI TCP Connection(4)-127.0.0.1"]
        at org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel.<clinit>(LanguageLevel.java:25)
        at org.jetbrains.kotlin.com.intellij.core.CoreLanguageLevelProjectExtension.<init>(CoreLanguageLevelProjectExtension.java:26)
        at org.jetbrains.kotlin.com.intellij.core.JavaCoreProjectEnvironment.<init>(JavaCoreProjectEnvironment.java:42)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment.<init>(KotlinCoreProjectEnvironment.kt:26)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$ProjectEnvironment.<init>(KotlinCoreEnvironment.kt:121)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:425)
        at org.jetbrains.kotlin.incremental.parsing.ParseFileUtilsKt.classesFqNames(parseFileUtils.kt:46)
        at org.jetbrains.kotlin.incremental.parsing.ParseFileUtilsKt.classesFqNames(parseFileUtils.kt:35)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.getRemovedClassesChanges(IncrementalCompilerRunner.kt:362)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompileImpl(IncrementalJvmCompilerRunner.kt:224)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompileImpl(IncrementalJvmCompilerRunner.kt:169)
        at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.calculateSourcesToCompileImpl(IncrementalJvmCompilerRunner.kt:110)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.calculateSourcesToCompile(IncrementalCompilerRunner.kt:171)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.sourcesToCompile(IncrementalCompilerRunner.kt:163)
        at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:107)
        ... 19 more
  • 触发该报错后,再用IntelliJ构建项目也会出现相同错误,目前仅能通过删除Gradle缓存临时修复
  • 曾怀疑问题和JDK版本相关,但多次切换JDK版本后问题仍会复现,无法定位具体根因
根因定位

这个报错本质是Kotlin编译器内嵌的IntelliJ Java语言级别枚举类初始化失败,和手动切换的全局JDK版本没有直接关系,核心触发点有两个:

  • Gradle守护进程类加载污染:命令行执行gradle命令时默认复用已经启动的守护进程,一旦旧进程里出现Kotlin编译器jar包版本冲突、类加载异常,后续所有构建都会直接抛这个错。删除Gradle缓存能临时恢复,本质是删缓存的操作会强制杀死旧守护进程、重新拉取依赖,并没有真正解决冲突。
  • Kotlin插件版本和运行JDK不兼容:如果项目用的Kotlin Gradle插件版本低于1.7.0,运行在JDK18及以上版本时,会因为识别不了高版本JDK的语言级别标识,直接触发LanguageLevel类的静态初始化失败。另外Windows下如果系统环境变量里JAVA_TOOL_OPTIONS配置了非常规JVM参数,也可能打断这个类的初始化流程。
修复方案

按顺序尝试,哪步生效就可以停止:

  1. 先在项目根目录执行gradlew --stop,把所有现存的Gradle守护进程全部终止,再重新执行构建命令,80%以上的场景这步就能解决问题
  2. 打开项目根目录的构建配置文件(build.gradle或build.gradle.kts),将Kotlin Gradle插件版本升级到匹配的稳定版:使用JDK17/19的话至少升级到1.7.20,使用JDK20/21的话至少升级到1.9.0。同时检查gradle.properties里有没有自定义的异常JVM参数,有的话先注释掉
  3. 打开Windows系统环境变量设置,查找JAVA_TOOL_OPTIONS、_JAVA_OPTIONS两个变量,把里面和类加载、字节码修改、全局代理相关的自定义参数暂时删除,这类参数会全局注入所有JVM进程,很容易导致编译器初始化失败
  4. 以上操作都无效的话,先执行gradlew clean build --no-daemon,关闭守护进程模式做单次构建,如果能正常运行,直接删除用户目录下.gradle/daemon文件夹内所有版本的缓存文件,后续启动新守护进程就不会存在历史污染问题。

内容的提问来源于stack exchange,提问作者cershif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:51:36