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控制台上运行它了。
答案 0 :(得分:44)
我遇到了同样的问题,通过从 android studio 安装 cocomand-line 工具解决了
点击文件,设置然后在搜索栏输入sdk并点击android sdk
然后点击 sdk tools,勾选android命令行工具框,点击apply允许下载。然后尝试在您的 cmd 上再次运行 flutter doctor --android-licenses
您将被提示接受许可证
答案 1 :(得分:36)
从 Android SDK管理器安装 Android SDK命令行工具为我完成了工作。
答案 2 :(得分:27)
这就是我在 Mac 上解决这个问题的方法(也可以在 Windows 上运行):
解决这个问题的方法是安装 Android SDK 命令行工具。
Android Studio 安装完成后,您可以按预期接受许可:
$ flutter doctor --android-licenses
为所有许可选择“是”后,Android 许可将被接受。确认:
您应该会看到已接受所有 Android 许可。
答案 3 :(得分:5)
从Android SDK Manager安装Android SDK命令行工具解决了我的问题。
答案 4 :(得分:4)
您需要 JDK 8,因为在更高版本中删除了所需的文件。
安装后,您可以使用
在版本之间切换sudo update-alternatives --config java
然后选择 JDK 8 的选项。这还将显示您需要的 JDK 8 安装位置:
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre/"
PATH=$PATH:$JAVA_HOME/bin
答案 5 :(得分:3)
在Linux上
Android SDK
仅适用于JDK 8
,因此请卸载当前的JDK
版本。
粘贴命令并按下选项卡进行自动填充,删除以openjdk-
开头的所有显示给您的内容
sudo apt remove openjdk-
现在安装JDK 8
sudo apt install openjdk-8-jdk
答案 6 :(得分:2)
我建议清除android-studio-dir和android-sdk设置,然后让flutter自动检测它们的路径:这对我有用。
flutter config --android-studio-dir="" flutter config --android-sdk=""
答案 7 :(得分:2)
似乎您正在收到JDK异常,当您没有在系统变量 OR 上设置 JAVA_HOME 时,就会发生这种情况,而您几乎已经设置了JDK,但是输入错误 OR 文件夹,您正在尝试使用错误的JDK运行SDK Manager(允许您接受Android许可证)。
对于JDK 9或更高版本:
实际上,Android SDK Manager仅与在JDK 8版本上编译的Gradle配合使用,用于Android开发,因此,如果您已经在系统变量上设置了最新的JDK版本,请考虑对其进行降级到JDK版本8。
此版本对我来说很好:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
如果已安装JDK 8
如果您手动将JDK文件夹提取到目录中,则可能已将其设置为“错误”。我的意思是:您向Java文件夹 bin 指出了错误的方式,但它仍然有效。 您必须将 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"
Windows
在您的环境变量管理器中:
设置一个名为JAVA_HOME的新SYSTEM VARIABLE
然后,编辑PATH变量并向其中添加一个新寄存器:
%JAVA_HOME%\bin
实际上,我真的不知道如何在MacOS中管理JDK,如果那是您的OS,对不起:(
希望有帮助!
答案 8 :(得分:2)
上述解决方案完全有效,但有一个解决方案我看到的次数比我预期的要少: sdkman => https://sdkman.io/
安装了这样的工具,更改java版本很快(以java 8为例):
❯ sdk install java 8.0.282.hs-adpt
❯ sdk use java 8.0.282.hs-adpt
答案 9 :(得分:1)
首先你需要知道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
并按照说明接受许可
问候,希望这篇文章对您有所帮助
答案 10 :(得分:0)
我的解决方案是:
我安装了 Android SDK Build-Tools、Android Emulator 和 Android SDK Platform-Tools。另外我在环境变量中有 JAVA_HOME
变量。
所以我决定卸载 Android SDK Build-Tools、Android Emulator 和 Android SDK Platform-Tools 并重新安装它们。此外,我删除了 JAVA_HOME
变量。在这些操作之后,我在终端中运行 flutter doctor --android-licenses
。不知何故,它成功了。
答案 11 :(得分:0)
对我来说,在 Windows 10 上,答案只是删除 JAVA_HOME 环境变量。
如果您是一名 Java 开发人员,或者您依赖某些 Java 软件来完成您的工作,这可能不是一个好主意,但如果您是一名无法在 Java 领域工作的开发人员并且您'像我一样刚刚开始使用 Flutter,然后进入系统环境变量并杀死那个。 flutter doctor --android-licenses
在我这样做之后就按预期工作了。