Ubuntu环境下Flutter run报NoClassDefFoundError问题求助
问题
在Ubuntu 20.10系统升级Android Studio 22.2.1 Patch 1和openJDK-20后,在VS Code中执行flutter run命令失败,报错信息如下:
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:118) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:420) 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:371) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:105) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:249) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:38) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:80) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:92) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:602) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:93) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1644) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) 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) FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':location:compileDebugKotlin'. > Internal compiler error. See log for more details * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 7s Running Gradle task 'assembleDebug'... 7.8s Exception: Gradle task assembleDebug failed with exit code 1
注:应用未使用Kotlin,且在MacOS系统可正常运行,已尝试更新ndkVersion至最新、删除build和.gradle文件夹,均无效。
可能原因与解决方法
原因1:JDK版本与Kotlin编译环境不兼容
OpenJDK 20属于较新的预览/非LTS版本,项目依赖的Kotlin编译器版本大概率对其支持不足,旧版Kotlin工具链无法适配JDK 20的API变化,从而触发NoClassDefFoundError。
解决方法:- 降级JDK至17(LTS版本,兼容性更稳定):
- 安装OpenJDK 17:
sudo apt install openjdk-17-jdk - 切换系统默认JDK:
sudo update-alternatives --config java,选择OpenJDK 17对应的选项 - 验证版本:
java -version
- 安装OpenJDK 17:
- 在Flutter项目的
android/gradle.properties中指定JDK路径:
路径根据实际安装位置调整。org.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64
- 降级JDK至17(LTS版本,兼容性更稳定):
原因2:Android Studio Kotlin插件与项目依赖版本不匹配
升级Android Studio后,内置的Kotlin插件版本更新,但项目gradle配置中指定的Kotlin版本仍为旧版,导致编译时环境冲突。
解决方法:- 打开项目
android/build.gradle文件,找到ext.kotlin_version,将其更新为与Android Studio内置版本一致的数值(可在Android Studio的Settings -> Languages & Frameworks -> Kotlin查看当前插件版本):buildscript { ext.kotlin_version = "1.8.22" // 替换为匹配的版本 repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.4.2" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } - 执行
flutter clean清除缓存,再重新运行flutter run。
- 打开项目
原因3:Gradle版本与JDK、Kotlin版本不兼容
旧版Gradle无法适配高版本JDK或Kotlin,导致编译流程出错。
解决方法:- 打开项目
android/gradle/wrapper/gradle-wrapper.properties,修改distributionUrl为兼容JDK 17的Gradle版本(如7.6及以上):distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip - 同步gradle配置后重新编译。
- 打开项目
原因4:VS Code Flutter插件未同步环境配置
VS Code可能仍在调用旧的JDK或Kotlin环境路径,导致编译时工具链异常。
解决方法:- 在VS Code中打开命令面板(
Ctrl+Shift+P),执行Flutter: Select SDK,确认选择的是正确的Flutter SDK路径 - 重启VS Code,清除缓存后重新运行
flutter run
- 在VS Code中打开命令面板(
内容的提问来源于stack exchange,提问作者SePröbläm
相关产品推荐
相关产品推荐

