安装Flutter时出现Java类路径相关运行错误该如何解决?
错误根因定位
你遇到的java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema报错,本质是Android SDK Manager依赖的JAXB模块在你当前使用的高版本JDK(Java 9及以上)中被默认移除了,旧版Android SDK工具仅原生兼容JDK 8,高版本JDK不再内置javax.xml.bind相关类包,因此调用SDK相关命令时会抛出类找不到的异常。
完整报错日志:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156) at com.android.repository.api.SchemaModule.(SchemaModule.java:75) at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.java:81) at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73) at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
解决方案
可根据自身使用场景任选以下一种方案解决:
- 方案一(兼容性最好,推荐):切换JDK 8作为Android工具链专属运行环境
- 安装OpenJDK 8或Oracle JDK 8
- 在系统环境变量中新增
ANDROID_JAVA_HOME,变量值填写JDK 8的安装路径,该变量会被Flutter优先读取作为Android相关工具的运行Java环境,不会影响系统其他程序的JDK版本配置 - 重启终端后执行
flutter doctor --android-licenses验证,报错会消失
- 方案二(不更换现有JDK版本):手动补充JAXB依赖包
- 下载JAXB相关依赖jar包:jaxb-api、jaxb-impl、jaxb-core、activation
- 将所有下载的jar包放入Android SDK安装目录下的
tools/lib/文件夹中 - 重启终端后重新执行原报错命令即可
- 方案三(升级工具适配高版本JDK):更新到最新版Android SDK命令行工具
- 打开Android Studio,依次进入
Settings > Appearance & Behavior > System Settings > Android SDK > SDK Tools - 勾选「Android SDK Command-line Tools (latest)」,取消勾选旧版已废弃的「Android SDK Tools (Obsolete)」
- 点击应用完成安装更新后,执行
flutter doctor重新检查环境即可
- 打开Android Studio,依次进入
验证标准
执行flutter doctor命令,所有检查项均显示通过(无报错提示)即代表问题已解决。
内容的提问来源于stack exchange,提问作者rookie
相关产品推荐
相关产品推荐

