当安装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)

当前回答

TLDR;试着在OSX上设置JAVA_HOME工作得很好

export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

从AdoptOpenJDK安装JDKs 8 (LTS):

# brew tap adoptopenjdk/openjdk

brew cask install adoptopenjdk/openjdk/adoptopenjdk8

其他回答

我也面临同样的问题。虽然我是一个有点过时的开发人员(仍然使用windows开发:P)

在windows上解决此问题:

步骤1:如果没有安装jdk 8,请安装它(jdk 9或11不能工作,但您可以在其他开发用途中安装它们)。

使用Chocolatey非常简单:

Choco安装jdk8

(如果使用Chocolatey安装,跳过步骤2和3)

步骤2:进入环境变量设置,将JAVA_HOME设置为jdk 8的安装目录。

步骤3:进入path变量,添加jdk 8的bin目录,并将其移动到顶部。

步骤4:关闭所有打开的终端会话并重新启动一个新会话

可选步骤5:根据您在终端运行中的目标(可能需要将sdkmanager添加到路径或直接导航到目录):

sdkmanager——更新

这是所有!:哦,享受飘动吧!: D

正如@steven指出的,安装Java 8(这里有Ubuntu 16.04、18.04和20.04/20.10的链接https://computingforgeeks.com/how-to-install-java-8-on-ubuntu/),然后用下面的命令将其设置为默认Java版本:

sudo update-alternatives --config java

刚刚有这个错误,通过在Android Studio上下载Android SDK命令行工具(最新),在首选项>外观和行为>系统设置> Android SDK > SDK工具并重新运行flutter doctor——Android -licenses来解决

最后,将新工具添加到你的PATH中,在你的.bashrc, .zshrc或类似的目录中,在过时的工具之前:

export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin

更新2019 - 10:

正如问题跟踪器中所述,谷歌一直在开发一个新的Android SDK命令行工具版本,该版本运行在当前的jvm(9,10, 11+)上,并且不依赖于已弃用的JAXB EE模块!

您可以在Android Studio内下载和使用新的Android SDK命令行工具,也可以从谷歌服务器手动下载:

Linux SDK工具 Mac OS SDK工具 Windows SDK工具

对于最新版本,请检查repository.xml中的url。

如果您手动解包命令行工具,请注意将它们放在$ANDROID_HOME内的子文件夹中(例如$ANDROID_HOME/cmdline-tools/…)

2021 - 03年更新:

最新的稳定命令行工具可以在google下载网站上找到。这些工具比上面链接的工具更新。

因为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就可以工作了。