Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(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:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more

在运行flutter doctor -android-licenses时,我得到上述错误。有人知道为什么会这样吗,我该怎么补救吗?我已经在颤振控制台上运行了


当前回答

对我来说,在Windows 10上,答案很简单,就是删除JAVA_HOME环境变量。

如果您是Java开发人员,或者依赖Java软件来完成工作,这可能不是一个好主意,但如果您是一个不熟悉Java领域的开发人员,并且您像我一样刚刚开始使用Flutter,那么请进入系统环境变量并删除它。颤振医生,我这么做之后,机器人许可证正常工作了。

其他回答

我是Mac用户,我解决了这个问题。

这个答案也可以帮助Windows用户和Linux用户从用户反馈中解决问题。

首先,这是我遇到的问题 $ flutter doctor -v

下面的命令不适合我的情况。 医生——机器人执照

解决这个问题的方法就是安装 Android SDK命令行工具。以及如何? 你只需要按以下两个步骤来做。

安装:Android SDK命令行工具

步骤1。开放SDK管理器 顶部菜单->工具-> SDK管理器

步骤2。安装命令行工具

展现外表和行为 展开系统设置 点击Android SDK 单击“SDK工具”页签 检查Android SDK命令行工具(最新) 单击“应用”按钮。 然后单击OK按钮完成安装。

继续签署android许可。

Android Studio完成安装后,您可以执行以下操作。 医生——机器人执照 在多次同意后,所有的android许可证都已签署。

再让医生检查一下

$ flutter doctor -v

你们可以看到 接受所有Android许可。

恭喜你,你已经完成了这个任务!

在Linux上

Android SDK仅适用于JDK 8,因此请卸载当前JDK版本。

跳过命令并按tab键自动完成,删除它显示的以openjdk-开头的所有内容

sudo apt remove openjdk-

然后安装JDK 8

sudo apt install openjdk-8-jdk

对我来说,在Windows 10上,答案很简单,就是删除JAVA_HOME环境变量。

如果您是Java开发人员,或者依赖Java软件来完成工作,这可能不是一个好主意,但如果您是一个不熟悉Java领域的开发人员,并且您像我一样刚刚开始使用Flutter,那么请进入系统环境变量并删除它。颤振医生,我这么做之后,机器人许可证正常工作了。

似乎你得到了一个JDK异常,它发生在你没有在你的系统变量上设置JAVA_HOME,或者你几乎已经设置了JDK,但在错误的文件夹中,或者你试图运行SDK管理器(允许你接受Android许可证)与错误的JDK。

对于JDK 9或更高版本:

实际上,Android SDK管理器只适用于在Android开发的JDK 8版本上编译的Gradle,所以,如果你已经在系统变量上设置了最新的JDK版本,可以考虑将其降级到JDK 8版本。

这个版本对我来说很好:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

如果JDK 8已经安装

如果您手动将JDK文件夹解压缩到某个目录,可能您设置“错误”了。我的意思是:您指向了错误的bin Java文件夹,但它仍然可以工作。 你必须将JAVA_HOME设置为JDK的根目录,例如: 在JDK压缩的文件夹中,您必须解压缩它,并将系统变量指向解压缩的文件夹,而不是直接指向bin目录,您必须将JAVA_HOME作为系统变量,并将bin文件夹声明为可执行文件。

例子:

Linux

在你的shell配置文件中:

export JAVA_HOME="/home/user/jdk1.8.0_261"
export PATH="$PATH:$JAVA_HOME/bin"

窗户

在环境变量管理器中:

设置一个名为JAVA_HOME的新系统变量

然后,编辑PATH变量并添加一个新的寄存器:

%JAVA_HOME%\bin

实际上,我真的不知道如何在MacOS中管理jdk,如果那是你的OS,对不起:(

希望能有所帮助!

我的解决方案是: 我安装了Android SDK Build-Tools, Android Emulator和Android SDK Platform-Tools。我在环境变量中也有JAVA_HOME变量。

所以我决定卸载Android SDK Build-Tools, Android Emulator和Android SDK Platform-Tools,重新安装。此外,我删除了JAVA_HOME变量。做完这些手术后,我在终端运行颤振医生——机器人执照。不知何故,它成功了。