wake-up-neo.net

Fehler beim Installieren von Android-sdk: "Java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema"

Bei der Installation der SDK-Tools Android wird der folgende Fehler ausgegeben:

Java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema

Warum passiert das und wie kann es behoben werden?

Debug-Ausgabe:

$ 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)
107
Novellizator

Ich hatte heute Morgen ein ähnliches Problem (ich habe versucht, mit Unity3D für Android zu bauen). Am Ende habe ich JDK9 deinstalliert und Java SE Development Kit 8u144 installiert. Hoffe das hilft.

  1. brew cask uninstall Java # Java9 deinstallieren
  2. brew tap caskroom/versions
  3. brew cask install Java8 # Java8 installieren
  4. touch ~/.Android/repositories.cfg # Ohne diese Datei tritt beim nächsten Schritt ein Fehler auf
  5. brew cask install Android-sdk
94
spassvogel
set Java_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee

Dies hat das Problem unter Windows für mich behoben.

Quelle 1 , Quelle 2

61
Tim Jenßen

Um diesen Fehler zu beheben, können Sie Ihre Version Java downgraden.

Oder exportiert die folgende Option auf Ihrem Terminal:

Linux/MAC:

export Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

Windows :

set Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

Und um es dauerhaft zu speichern, können Sie den Java_OPTS in Ihre Profildatei unter Linux (.zshrc, .bashrc und usw.) exportieren oder unter Windows dauerhaft als Umgebung hinzufügen.


ps. Dies funktioniert nicht für den Java 11+, der keinen Java EE hat Module. Für diese Option ist es eine gute Idee, ein Downgrade Ihrer Java-Version durchzuführen oder auf ein Flattern zu warten pdate .

Ref: JDK 11: Ende der Straße für Java EE-Module

57
coderade

Unter Mac/Linux verwenden Sie:
export Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

Funktioniert sowohl für JDK 9 als auch für JDK 10, ohne Patchen eines Skripts (sdkmanager, avdmanager)

15
oori

Ich fand zwei Antworten, die für mich funktionierten, ohne JDK 10 (oder 9) deinstallieren zu müssen, das ich für create-react-app benötige. Sowohl JDK 9 als auch 10 sind nicht mit Android-sdk kompatibel!


Siu Ching Pong -Asuka Kenji - schlägt vor, das sdkmanager -Skript zu ändern und diese Zeile zu ersetzen:

DEFAULT_JVM_OPTS='"-Dcom.Android.sdklib.toolsdir=$APP_HOME"'  

mit:

DEFAULT_JVM_OPTS='"-Dcom.Android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

Beachte, dass dieser Mod beim Update von sdkmanager überschrieben wird.
Überprüfen Sie seinen Post und den, auf den er verweist, auf weitere Details.
Diese Lösung war auch eine der Lösungen, die in diesem Thema zu Github-Problemen erwähnt wurden.


Deutscher Beitrag gibt die Ursache des Konflikts an und zeigt einen Fix an, der durch Updates nicht überschrieben wird.
Er schlägt vor, /Library/Java/JavaVirtualMachines/Info.plist umzubenennen, um es aus dem Skript zu verdunkeln, das nach der höchsten Version von Java sucht, die sich auf Ihrem System befindet. Auf diese Weise wird JDK 8 als Standard zurückgegeben.
Wenn Sie explizit auf JDK 10 Bezug nehmen oder es auf $Java_HOME setzen, können Sie bei Bedarf JDK 10 anstelle der Standardeinstellung verwenden.
Details finden Sie in seinem Beitrag.

12
SherylHohman

Sie müssen Ihrem Profil Folgendes hinzufügen (funktioniert unter MacOS):

export Java_HOME=`/usr/libexec/Java_home -v 1.8`

Sie müssen nichts patchen.

12
Farsheed

Seltsamerweise ist Java9 nicht mit Android-sdk kompatibel

$ avdmanager
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.AvdManagerCli.run(AvdManagerCli.Java:213)
    at com.Android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.Java:200)
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

Kombiniert alle Befehle zu einem für eine einfache Referenz:

$ Sudo rm -fr /Library/Java/JavaVirtualMachines/jdk-9*.jdk/
$ Sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
$ Sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane

$ /usr/libexec/Java_home -V
Unable to find any JVMs matching version "(null)".
Matching Java Virtual Machines (0):
Default Java Virtual Machines (0):
No Java runtime present, try --request to install

$ brew tap caskroom/versions
$ brew cask install Java8
$ touch ~/.Android/repositories.cfg
$ brew cask install Android-sdk
$ echo 'export Android_SDK_ROOT="/usr/local/share/Android-sdk"' >> ~/.bash_profile
$ Java -version
Java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
$ avdmanager

Usage:
      avdmanager [global options] [action] [action options]
      Global options:
  -s --silent     : Silent mode, shows errors only.
  -v --verbose    : Verbose mode, shows errors, warnings and all messages.
     --clear-cache: Clear the SDK Manager repository manifest cache.
  -h --help       : Help on a specific command.

Valid actions are composed of a verb and an optional direct object:
-   list              : Lists existing targets or virtual devices.
-   list avd          : Lists existing Android Virtual Devices.
-   list target       : Lists existing targets.
-   list device       : Lists existing devices.
- create avd          : Creates a new Android Virtual Device.
-   move avd          : Moves or renames an Android Virtual Device.
- delete avd          : Deletes an Android Virtual Device.
8
Well Smith

Installieren Sie einfach JDK Version 8 und wählen Sie es als Standard aus:

Sudo update-alternatives --config Java
7
Steven

Wenn Sie Ihre Java -Version nicht ändern möchten (ich nicht). Sie können die Version in Ihrer Shell vorübergehend ändern:

erster Lauf

/usr/libexec/Java_home -V

wählen Sie dann eine Hauptversion aus, wenn Sie sie installiert haben, andernfalls installieren Sie sie zuerst:

export Java_HOME=`/usr/libexec/Java_home -v 1.8`

Jetzt können Sie sdkmanager ausführen

7
Sarah A

Da Java 11 JavaEE entfernt hat, müssen Sie einige Gläser herunterladen und zum Klassenpfad hinzufügen:

JAXB: https://javaee.github.io/jaxb-v2/

JAF: https://www.Oracle.com/technetwork/articles/Java/index-135046.html

Dann editiere sdkmanager.bat so, dass set CLASSPATH = ... endet mit ;% CLASSPATH%

Stellen Sie CLASSPATH so ein, dass es JAXB und JAF enthält:

set CLASSPATH=jaxb-core.jar;jaxb-impl.jar;jaxb-api.jar;activation.jar

Dann funktioniert sdkmanager.bat.

6
Peter Quiring

Führen Sie die Befehle Java -version und javac -version in einer Befehlszeile aus, um sicherzustellen, dass sie von demselben JDK stammen (z. B. Version 1.8.0_181).

Andernfalls müssen Sie die Variable PATH so ändern, dass sie nur auf ein einzelnes JDK verweist. Wenn Sie sich nicht sicher sind, wie Sie vorgehen sollen, deinstallieren Sie einfach alle anderen Java Instanzen mit Ausnahme von Java 8 (Software in Windows). Derzeit empfehlen sowohl Unity als auch Android die Verwendung von JDK 8.

Mit Java 8 ist es nicht erforderlich, das Java.se.ee -Modul zu exportieren, wie in einigen anderen Antworten gezeigt. Sie können auch Java_OPTS oder andere mgebungsvariablen entfernen, die Sie festgelegt haben.

1

Für Windows-Computer deinstallieren Sie das JDK, wenn es höher als 1.8.172 ist. Installieren Sie JDK 1.8.172

Ich hatte das gleiche Problem in Windows 10 mit Java 10. Ich habe Java 10 deinstalliert und Java8 installiert. Es funktioniert jetzt einwandfrei für mich :)

1
Jagan

Für Linux-Benutzer (ich verwende eine Debian-Distribution, Kali) Hier ist, wie ich meine gelöst habe.

Wenn Sie jdk-8 noch nicht haben, möchten Sie es bei Oracle herunterladen

https://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html

Ich habe die jdk-8u191-linux-x64.tar.gz

Schritt 1 - Installation von Java Verschieben Sie das Gerät und packen Sie es an einem geeigneten Ort aus

$ mv jdk-8u191-linux-x64.tar.gz /suitablelocation/
$ tar -xzvf /suitablelocation/jdk-8u191-linux-x64.tar.gz

Sie sollten einen entpackten Ordner wie jdk1.8.0_191 erhalten. Sie können das Archiv anschließend löschen, um Speicherplatz zu sparen

Schritt 2 - Einrichten von Alternativen zum Standardverzeichnis Java

$ update-alternatives --install /usr/bin/Java java /suitablelocation/jdk1.8.0_191/bin/Java 1
$ update-alternatives --install /usr/bin/javac javac /suitablelocation/jdk1.8.0_191/bin/javac 1

Schritt 3 - Auswahl Ihrer Alternativen als Standard

$ update-alternatives --set Java /suitablelocation/jdk1.8.0_191/bin/Java
$ update-alternatives --set javac /suitablelocation/jdk1.8.0_191/bin/javac

Schritt 4 - Bestätigen der Standardversion Java

$ Java -version

Anmerkungen

  1. Im Originalartikel hier: https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux wurde auch das Standard-Plugin für Mozilla festgelegt. Ich gehe davon aus, dass wir die Plugins nicht wirklich brauchen, da wir lediglich versuchen, sie für Android zu entwickeln.
  2. Wie in @ spassvogels Antwort sollten Sie auch eine @ repositories.cfg-Datei in Ihrem ~/.Android-Verzeichnis ablegen, da dies zum Aktualisieren der Tools-Repolisten erforderlich ist
  3. Zum Verschieben einiger Elemente ist möglicherweise Rootberechtigung erforderlich. Verwenden Sie Sudo mit Bedacht aus.
  4. Informationen zur Verwendung von sdkmanager finden Sie im offiziellen Handbuch: https://developer.Android.com/studio/command-line/sdkmanager
1
hugovicfortman

Führen Sie ein Downgrade Ihrer Java Version durch.

Stellen Sie sicher, dass Java nicht höher als 8 ist

In meinem Fall. Ich ändere die ide Java -Version. Dies löst mein Problem. enter image description here

0
anKotliner

Beim Laufen auf dasselbe Problem gestoßen

$/Users // Library/Android/sdk/tools/bin/sdkmanager "Plattformen; Android-28" "Build-Tools; 28.0.3"

Gelöst als $ echo $ Java_HOME /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home

$ ls/Library/Java/JavaVirtualMachines /

jdk-11.0.1.jdk
jdk1.8.0_202.jdk

Ändern Sie Java in 1.8

$ export Java_HOME = '/ Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home'

Dann läuft der selbe Befehl einwandfrei $/Users // Library/Android/sdk/tools/bin/sdkmanager "Plattformen; Android-28" "Build-Tools; 28.0.3"

0
Sandeep

Wenn Ihr Android Studio/jre eine andere Java-Version verwendet, wird dieser Fehler angezeigt. Um das Problem zu lösen, setzen Sie Android studio/jre auf Ihr Java_HOME. und deinstalliere dein eigenes Java.

0
Licat Julius