[英]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.