当安装android sdk工具时,会产生以下错误:
java.lang.NoClassDefFoundError: javax / xml /绑定/注释/ XmlSchema
为什么会发生这种情况,如何解决?
调试输出:
$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$ brew cask install android-sdk
==> Caveats
We will install android-sdk-tools, platform-tools, and build-tools for you.
You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:
'export ANDROID_SDK_ROOT=/usr/local/share/android-sdk'
This operation may take up to 10 minutes depending on your internet connection.
Please, be patient.
==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
Already downloaded: /Users/tomasnovella/Library/Caches/Homebrew/Cask/android-sdk--3859397,26.0.1.zip
==> Verifying checksum for Cask android-sdk
==> Installing Cask android-sdk
==> 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.SdkManagerCli.main(SdkManagerCli.java:117)
==> at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
==> Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
==> at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
==> at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
==> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
==> ... 5 more
Error: Command failed to execute!
==> Failed command:
/usr/local/Caskroom/android-sdk/3859397,26.0.1/tools/bin/sdkmanager tools platform-tools build-tools;26.0.1
==> Standard Output of failed command:
==> Standard Error of failed command:
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.SdkManagerCli.main(SdkManagerCli.java:117)
我的Java版本是15.0.1。适用于Mac操作系统。
这就是我解决问题的方法。
下载zip: jaf- 31_1 .zip从:https://download.oracle.com/otn-pub/java/jaf/1.1.1/jaf-1_1_1.zip?AuthParam=1609860571_68ca6f30491c76e81970a3849504fb6a
从https://download.oracle.com/otn-pub/java/jaf/1.1.1/jaf-1_1_1.zip?AuthParam=1609860571_68ca6f30491c76e81970a3849504fb6a下载了zip: jaxb-ri-2.3.1.zip
解压缩到一个文件夹:~/jars/。导出的类路径如下
export
CLASSPATH=~/jars/FastInfoset.jar:~/jars/activation.jar:~/jars/codemodel.jar:~/jars/dtd-parser.jar:~/jars/istack-commons-runtime.jar:~/jars/istack-commons-tools.jar:~/jars/jaf-1.1.1:~/jars/jaf-1_1_1.zip:~/jars/javax.activation-api.jar:~/jars/jaxb-api.jar:~/jars/jaxb-jxc.jar:~/jars/jaxb-ri:~/jars/jaxb-ri-2.3.1.zip:~/jars/jaxb-runtime.jar:~/jars/jaxb-xjc.jar:~/jars/relaxng-datatype.jar:~/jars/rngom.jar:~/jars/stax-ex.jar:~/jars/txw2.jar:~/jars/xsom.jar
cd ~/Library/Android/sdk/tools/bin/sdkmanager修改CLASSPATH如下所示
类路径=$CLASSPATH:$APP...
保存文件后重新执行命令。
我也有这个错误
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:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 5 more
然后不再卸载最新的Java环境(在我的例子中是Java 13)
安装Java 8,
我已经完成了以下步骤
打开android studio >进入配置>选择SDK管理器>进入SDK工具>勾选android SDK命令行工具>应用>并等待安装
重新启动命令行工具
输入命令颤振医生
输入命令flutter doctor——android-licenses
并输入y来接受所有的许可。
要解决这个错误,可以降级Java版本。
或在您的终端上导出以下选项:
Linux -麦克:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
窗口:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
如果这不起作用,则尝试导出java.xml.bind。
Linux:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind'
窗口:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind
为了永久保存它,您可以在Linux上的概要文件中导出JAVA_OPTS。zshrc, .bashrc等)或将其作为Windows上永久的环境变量添加。
ps.这不适用于Java 11/11+,它没有Java EE模块。对于这个选项,降级Java版本或等待Flutter更新是个好主意。
参考:JDK 11: Java EE模块之路的尽头
因为Java 11已经删除了JavaEE,你需要下载一些jar并添加到类路径中:
JAXB:
https://javaee.github.io/jaxb-v2/
贾夫:
https://www.oracle.com/technetwork/articles/java/index-135046.html
然后编辑sdkmanager.bat,以便设置CLASSPATH=…以;%CLASSPATH%结束
将CLASSPATH设置为包含JAXB和JAF:
set CLASSPATH=jaxb-core.jar;jaxb-impl.jar;jaxb-api.jar;activation.jar
那么sdkmanager.bat就可以工作了。
在我的情况下,我需要JDK 8(试图在ubuntu下使用AVD和SDK管理器在Qt)和11的不同工具。不能删除版本11。
“JAVA_OPTS”解决方案没有做任何事情。我真的不喜欢导出JAVA_HOME,因为它可能迫使您从同一个shell(如Qt)启动调用这些utils的任何工具,或者迫使您将其永久化,这是不方便的。
所以对我来说,解决办法很简单。在~/Android/tools/bin/sdkmanager和~/Android/tools/bin/avdmanager的第二行添加如下内容:
JAVA_HOME=“/usr/lib/jvm/java-8-openjdk-amd64”
(或rev 8 jdk的任何路径)。
因此,这些命令行工具以独立模式工作,它们也可以在其他工具(如Qt)调用时工作,而jdk 11仍然是其他工具的系统默认值。没有必要混合lib等…
唯一的缺点是,对这些命令行工具的任何更新都将删除这些修改,您必须重新输入这些修改。