扑医生--android-licenses给出了Java错误

时间:2020-05-24 23:40:59

标签: java windows android-studio flutter dart

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控制台上运行它了。

12 个答案:

答案 0 :(得分:44)

我遇到了同样的问题,通过从 android studio 安装 cocomand-line 工具解决了

点击文件,设置然后在搜索栏输入sdk并点击android sdk Android Sdk

然后点击 sdk tools,勾选android命令行工具框,点击apply允许下载。然后尝试在您的 cmd 上再次运行 flutter doctor --android-licenses 您将被提示接受许可证

答案 1 :(得分:36)

Android SDK管理器安装 Android SDK命令行工具为我完成了工作。

  1. 打开工具> SDK管理器
  2. 从左侧选择外观和行为> 系统设置> Android SDK
  3. 从顶部菜单中选择 SDK工具
  4. 检查 Android SDK命令行工具,然后单击“应用”。

答案 2 :(得分:27)

这就是我在 Mac 上解决这个问题的方法(也可以在 Windows 上运行):

解决这个问题的方法是安装 Android SDK 命令行工具。

安装 Android SDK 命令行工具

步骤 1. 打开 SDK 管理器

顶部菜单 -> 工具 -> SDK 管理器 enter image description here

步骤 2. 安装命令行工具

  1. 展开外观和行为
  2. 展开系统设置
  3. 点击Android SDK
  4. 点击SDK 工具
  5. 标签
  6. 检查 Android SDK 命令行工具(最新)
    enter image description here 单击“确定”,Android Studio 即可安装。

Android Studio 安装完成后,您可以按预期接受许可:

$ flutter doctor --android-licenses enter image description here

为所有许可选择“是”后,Android 许可将被接受。确认:

$ flutter doctor -v enter image description here

您应该会看到已接受所有 Android 许可。

答案 3 :(得分:5)

从Android SDK Manager安装Android SDK命令行工具解决了我的问题。

  1. 打开工具-> SDK Manager
  2. 外观和行为>系统设置> Android SDK
  3. 从顶部菜单中选择“ SDK工具”。 检查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

enter image description here

然后,编辑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 在我这样做之后就按预期工作了。