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并按照指示接受许可证

敬礼,希望这篇文章对你有所帮助

其他回答

在Linux上

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

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

sudo apt remove openjdk-

然后安装JDK 8

sudo apt install openjdk-8-jdk

上述解决方案完全有效,但有一个解决方案我看到的次数比我预期的要少: Sdkman => https://sdkman.io/

安装了这样的工具后,更改java版本非常快捷(以java 8为例):

❯ sdk install java 8.0.282.hs-adpt
❯ sdk use java 8.0.282.hs-adpt

我建议清除android-studio-dir和android-sdk设置,让flutter自动检测它们的路径:这对我来说是可行的。

颤振配置——android-studio-dir="" Flutter config——android-sdk=""

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

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

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

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