繁体   English   中英

flutter doctor --android-licenses 给出了 java 错误

[英]flutter doctor --android-licenses gives a java error

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

Android ZF20E3C5E54C0AB3D376AZD660B3F86安装Android SDK 命令行工具ZF20E3C5E54C0AB3D3765D660B3F86

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

替代步骤 #1:WINDOWS:文件>设置(Ctrl+Alt+S) / MAC: Android Studio >首选项


在此处输入图像描述

如果您在执行上述步骤后仍遇到问题,可以尝试将系统升级到 JDK 8。升级到 JDK 8 的官方文档可在此处获得。

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

这个答案也帮助 Windows 用户和 Linux 用户解决了用户反馈的问题。

起初,这是我遇到的问题
$ flutter 医生-v 在此处输入图像描述

以下命令不适用于我的情况。
$ flutter 医生 --android-licenses 在此处输入图像描述

解决这个问题的方法是安装
Android SDK 命令行工具 如何?
您只需要通过以下两个步骤来完成。

安装:Android SDK 命令行工具

步骤 1. 打开 SDK 管理器
顶部菜单 -> 工具 -> SDK 管理器在此处输入图像描述

步骤 2. 安装命令行工具

  1. 展开外观和行为
  2. 展开系统设置
  3. 点击Android SDK
  4. 单击SDK 工具的选项卡
  5. 检查Android SDK 命令行工具(最新)
  6. 单击应用按钮。 在此处输入图像描述 然后单击确定按钮完成安装。

继续签署 android 许可证。

Android Studio 完成安装后,您可以执行以下操作。
$ flutter 医生 --android-licenses
在此处输入图像描述 多次说yes后,android的license都签完了。

再次由 flutter 医生检查。

$ flutter 医生-v
在此处输入图像描述

您可以看到所有 Android 许可证都已接受。

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

我有同样的问题,通过安装 android 工作室的 coomand-line 工具解决了它

点击文件,设置,然后在搜索栏输入 sdk 并点击 android sdk 安卓 SDK

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

似乎您遇到了 JDK 异常,它发生在您没有在系统变量上设置JAVA_HOME或者您几乎设置了 JDK 但在错误的文件夹中或者您正在尝试运行 SDK 管理器(它允许您接受Android 许可证)使用错误的 JDK。

如果是 JDK 9 或更高版本:

Actually, Android SDK Manager works only with Gradle compiled on version of JDK 8 for Android development , so, if you have a most-recent JDK version already setted on system variables, consider to downgrade it to the JDK version 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"

Windows

在您的环境变量管理器中:

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

在此处输入图像描述

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

%JAVA_HOME%\bin

实际上,我真的不知道如何在 MacOS 中管理 JDK,如果那是你的操作系统,对不起:(

希望能帮助到你!

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 医生 --android-licenses 时出现上述错误。 有谁知道为什么会发生这种情况以及我该如何解决? 我已经在 flutter 控制台上运行它。

在 Linux

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

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

sudo apt remove openjdk-

现在安装JDK 8

sudo apt install openjdk-8-jdk

您需要 JDK 8,因为在更高版本中删除了所需文件。

安装后,您可以使用在版本之间切换

sudo update-alternatives --config java

然后是 select JDK 8 的选项。这还将显示您需要的 JDK 8 安装位置:

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre/"
PATH=$PATH:$JAVA_HOME/bin

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

 flutter config --android-studio-dir="" flutter config --android-sdk=""

首先你需要知道 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并按照说明接受许可证

问候,希望这篇文章对你有所帮助

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

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

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

My solution was: I had Android SDK Build-Tools, Android Emulator and Android SDK Platform-Tools installed. 我也在环境变量中有JAVA_HOME变量。

So I decided to uninstall Android SDK Build-Tools, Android Emulator and Android SDK Platform-Tools and install them again. 此外,我删除JAVA_HOME变量。 在这些操作之后,我在终端中运行flutter doctor --android-licenses 不知何故,它成功了。

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

如果您是 Java 开发人员,或者您依赖某些 Java 软件来完成您的工作,那么这可能不是一个好主意,但如果您是一个无法在 ZD52387880E1EA2283819Z 空间中工作的开发人员,那么您只需获得 375921113817A72像我一样从 Flutter 开始,然后 go 进入系统环境变量并杀死那个。 flutter doctor --android-licenses在我这样做之后就像它应该的那样工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM