颤振医生 --android-licenses 给出一个 java 错误
Posted
技术标签:
【中文标题】颤振医生 --android-licenses 给出一个 java 错误【英文标题】:flutter doctor --android-licenses gives a java error 【发布时间】:2021-11-07 10:14:41 【问题描述】: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 时遇到上述错误。有谁知道为什么会发生这种情况以及我该如何解决?我已经在颤振控制台上运行它了。
【问题讨论】:
【参考方案1】:我是 Mac 用户,我解决了这个问题。
这个回答也帮助 Windows 用户和 Linux 用户从用户的反馈中解决问题。
起初,这是我遇到的问题$ flutter doctor -v
以下命令不适用于我的情况。$ flutter doctor --android-licenses
解决此问题的方法是安装Android SDK 命令行工具。怎么做? 您只需要通过以下两个步骤即可。
安装:Android SDK 命令行工具
第 1 步。打开 SDK 管理器 顶部菜单 -> 工具 -> SDK 管理器
第 2 步。安装命令行工具
-
展开外观和行为
展开系统设置
点击Android SDK
点击SDK工具标签
检查 Android SDK 命令行工具(最新)
点击应用按钮。
然后点击确定按钮完成安装。
继续签署 android 许可证。
Android Studio 安装完成后,您可以执行以下操作。$ flutter doctor --android-licenses 多次同意后,所有的android许可证都已签署。
再次由颤振医生检查。
$颤振医生-v
你可以看到 接受所有 Android 许可证。
恭喜你完成了这个任务!
【讨论】:
适用于 Windows。谢谢。 同样适用于 linux。 在 MacBook M1 上工作✅? 在 Pops!_OS 上工作 我希望更多的答案会有这样漂亮的图片和分步说明!谢谢【参考方案2】:从 Android SDK Manager 安装 Android SDK 命令行工具 为我完成了这项工作。
-
打开工具 > SDK管理器
从左侧选择,外观和行为 > 系统设置 > Android SDK
从顶部菜单中选择 SDK 工具
勾选Android SDK命令行工具并点击“应用”。
第 1 步的替代方法:WINDOWS:文件 > 设置 (Ctrl+Alt+S) / MAC:Android Studio > 偏好
此修复适用于 Windows、Linux 和 Mac OS X。
如果您在执行上述步骤后仍然遇到问题,可以尝试将系统升级到 JDK 8。升级到 JDK 8 的官方文档可在 here 获取。
【讨论】:
谢谢!这解决了问题,但为什么呢? Flutter Doctor 需要 SDK 命令行工具,为什么 Flutter 没有打包这些工具? “Android SDK 命令行工具”是一个 Android SDK 打包工具,随您的 Android Studio 一起提供(RE:developer.android.com/studio/command-line)。它不能包含在颤振安装中。 显然这在 MacBook 上是必需的,但在 Windows 上不需要。我没有在 windows 中设置命令行工具。 我在Windows环境下遇到了问题 与直觉相反,即使对于使用 VS Code 进行开发的人,此解决方案也解决了该问题。【参考方案3】:我遇到了同样的问题,通过安装 android studio 的命令行工具解决了这个问题
点击文件,设置然后在搜索栏输入sdk并点击android sdk
然后点击 sdk tools,勾选android命令行工具框,点击apply允许下载。然后尝试在您的 cmd 上再次运行 flutter doctor --android-licenses
,系统将提示您接受许可证
【讨论】:
在 Mac 上,设置窗口位于 Android Studio -> Preferences 下 为什么不接受这个答案?为我解决了。【参考方案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】:对我来说,在 Windows 10 上,答案就是删除 JAVA_HOME 环境变量。
如果您是 Java 开发人员,或者您依赖一些 Java 软件来完成您的工作,这可能不是一个好主意,但如果您是一个不在 Java 领域工作的开发人员并且您像我一样刚开始使用 Flutter,然后进入系统环境变量并杀死那个。 flutter doctor --android-licenses
在我这样做之后就像它应该的那样工作。
【讨论】:
【参考方案6】:上述解决方案完全有效,但有一个解决方案我看到的次数比我预期的要少: sdkman => https://sdkman.io/
安装了这样的工具,改变java版本很快(以java 8为例):
❯ sdk install java 8.0.282.hs-adpt
❯ sdk use java 8.0.282.hs-adpt
【讨论】:
【参考方案7】:首先你需要知道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
并按照说明接受许可证
问候,希望这篇文章对你有所帮助
【讨论】:
除了卸载现有的java版本还可以使用sudo apt purge openjdk*
卸载任何现有的java版本,然后执行sudo apt autoremove
清除和删除系统上所有java相关的组件【参考方案8】:
我的解决方案是:
我安装了 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
。不知何故,它成功了。
【讨论】:
【参考方案9】:在 Linux 上
Android SDK
仅适用于 JDK 8
,因此请卸载您当前的 JDK
版本。
通过命令并按tab自动完成,删除它显示的所有以openjdk-
开头的东西
sudo apt remove openjdk-
现在安装JDK 8
sudo apt install openjdk-8-jdk
【讨论】:
【参考方案10】:您似乎遇到了 JDK 异常,当您没有在系统变量上设置 JAVA_HOME 时会发生这种情况或您几乎设置了 JDK 但错误或您正在尝试使用错误的 JDK 运行 SDK 管理器(允许您接受 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文件夹解压到一个目录下,可能是你设置的“错误”。我的意思是:您将错误的方式指向 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,如果那是你的操作系统,对不起:(
希望对你有帮助!
【讨论】:
此解决方案在 Windows 10 上不适用于我 @user12166478 非常感谢这解决了我的问题,但我一直缺少的是我的变量系统名称是没有 bin 的 JAVA_HOME 解决了我的问题我将其更改为 %JAVA_HOME%\bin 并且一切正常喜欢魅力!欢呼 这解决了我在 Windows 10 上的问题,谢谢!值得注意的是,reference JDK 8 有效,它不需要更重的 Oracle 许可证。 Android Studio 附带 Java 11 似乎仍然很奇怪,但 SDK 工具仍然需要 Java 8。【参考方案11】:我建议清除 android-studio-dir 和 android-sdk 设置,让 Flutter 自动检测它们的路径:这对我有用。
flutter config --android-studio-dir="" flutter config --android-sdk=""
【讨论】:
@guccisekspir:它将如何检测,我要不要再次运行颤振医生?以上是关于颤振医生 --android-licenses 给出一个 java 错误的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试运行颤振医生 --android-licenses 时出错
颤振医生 --android-licenses 显示错误消息
颤振医生 --android-licenses 给出一个 java 错误
颤振医生 --android-licenses 错误,如何解决这个问题?