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时,我得到上述错误。有人知道为什么会这样吗,我该怎么补救吗?我已经在颤振控制台上运行了
首先,您需要知道flutter可以在JDK 8上工作,因此如果您安装了其他版本,则需要清除它们,以便完全删除其他版本
注意:这是根据我的案例Ubuntu 20.04,这是根据我的情况,它不保证为你工作
如果您有JDK 11,要卸载,可以使用两个命令中的一个,这取决于您已经安装的命令,或者如果您不知道您的机器上安装了哪个命令,则可以同时运行两个命令。
sudo apt purge openjdk-11-jre-headless
sudo apt purge openjdk-11-jre
如果是其他版本,请将11替换为该数字。
如果使用默认JDK,则使用以下命令卸载
sudo apt purge default-jre
为了确保我们删除了所有与Java相关的东西,运行这个命令
sudo apt auto remove
注意:您可以运行以上所有命令,以确保完全删除与java相关的所有内容
要验证我们已经删除了所有的运行
java -v
如果您看到下面的错误或Java版本,那么Java还没有卸载
Unrecognized option: --version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
但是如果你得到的回复是没有找到Java,并且有Java安装建议,这意味着Java已经卸载
现在我们需要安装JDK 8运行这个命令
sudo apt install openjdk-8-jre
如果一切正常,重新启动您的机器并运行flutter doctor并按照指示接受许可证
敬礼,希望这篇文章对你有所帮助
似乎你得到了一个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,对不起:(
希望能有所帮助!
我是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许可。
恭喜你,你已经完成了这个任务!