[英]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:WINDOWS:文件>设置(Ctrl+Alt+S) / MAC: Android Studio >首选项
如果您在执行上述步骤后仍遇到问题,可以尝试将系统升级到 JDK 8。升级到 JDK 8 的官方文档可在此处获得。
我是 Mac 用户,我解决了这个问题。
这个答案也帮助 Windows 用户和 Linux 用户解决了用户反馈的问题。
以下命令不适用于我的情况。
$ flutter 医生 --android-licenses
解决这个问题的方法是安装
Android SDK 命令行工具。 如何?
您只需要通过以下两个步骤来完成。
步骤 1. 打开 SDK 管理器
顶部菜单 -> 工具 -> SDK 管理器
步骤 2. 安装命令行工具
Android Studio 完成安装后,您可以执行以下操作。
$ flutter 医生 --android-licenses
多次说yes后,android的license都签完了。
再次由 flutter 医生检查。
您可以看到所有 Android 许可证都已接受。
恭喜你,你已经完成了这个任务!
似乎您遇到了 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.