458 votes

Échec de l'installation de Android-sdk : "java.lang.NoClassDefFoundError : javax/xml/bind/annotation/XmlSchema"

Lors de l'installation des outils Android sdk, l'erreur suivante est émise :

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

Pourquoi cela se produit-il et comment y remédier ?

Sortie de débogage :

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

0 votes

Je suppose que votre question est "Quelle est la cause de cette erreur ?" La réponse est qu'il ne peut pas trouver les classes javax.xml.

47 votes

En fait, cette question pose un problème légitime d'installation du SDK Android lorsque l'on dispose de java9.

46 votes

J'ai ce problème, et j'ai copié/collé la première ligne de mon message d'erreur dans Google, et cette question a été le premier résultat qui est apparu. De plus, l'une des réponses ci-dessous l'a résolu. Cette question ne devrait absolument pas être fermée : quelles que soient les règles relatives aux questions, cette question remplit manifestement l'objectif global du site.

183voto

spassvogel Points 2234

J'ai eu un problème similaire ce matin (en essayant de construire pour Android en utilisant Unity3D). J'ai fini par désinstaller JDK9 et installer Kit de développement Java SE 8u144 . J'espère que cela vous aidera.

  1. brew cask uninstall java # désinstaller java9
  2. brew tap homebrew/cask-versions
  3. brew cask install java8 # installer java8
  4. touch ~/.android/repositories.cfg # sans ce fichier, une erreur se produira à l'étape suivante
  5. brew cask install android-sdk

0 votes

Merci... brew cask install java installe maintenant java9 et cela provoque cette erreur lors de l'installation d'Android-sdk. J'ai dû installer java8 pour pouvoir continuer.

1 votes

1. brew case uninstall java # désinstaller java9 2. brew tap caskroom/versions 3. brew cask install java8 # installer java8 4. touch ~/.Android/repositories.cfg # sans ce fichier, une erreur se produira à l'étape suivante 5. brew cask install Android-sdk

2 votes

J'ai eu l'erreur sur Windows 10, j'ai essayé ça, mais ça ne marche toujours pas. Des conseils ?

94voto

coderade Points 2856

Pour résoudre cette erreur, vous pouvez mettre à jour votre version de Java.

Ou exportez l'option suivante sur votre terminal :

Linux/MAC :

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Windows :

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

Si cela ne fonctionne pas, essayez d'exporter le java.xml.bind à la place.

Linux :

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind'

Windows :

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind

Et pour le sauvegarder de façon permanente, vous pouvez exporter le JAVA_OPTS dans votre fichier de profil sous Linux ( .zshrc , .bashrc etc.) ou l'ajouter comme variable d'environnement de façon permanente sous Windows.


ps. Cela ne fonctionne pas pour Java 11/11+, qui n'a pas de modules Java EE. Pour cette option est une bonne idée, downgrade votre version de Java ou d'attendre un Flutter mise à jour .

Réf : JDK 11 : la fin de la route pour les modules Java EE

7 votes

Cela a fonctionné pour moi sur Ubuntu 18.04 avec OpenJDK 10.0.2.

3 votes

Cela a fonctionné pour moi sur macOS Mojave (10.14.2) avec la version de Java "10.0.1" 2018-04-17.

22 votes

Une nouvelle erreur s'est produite pour moi sur macOS Mojave (10.14.2) : Une erreur s'est produite pendant l'initialisation de la couche de démarrage java.lang.module.FindException : Module java.se.ee non trouvé

66voto

Tim Jenßen Points 746
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

Cela a réglé le problème sur Windows pour moi.

Source 1 , source 2

2 votes

Je l'ai également utilisé sur ubuntu 16.04 (en utilisant export no set ) et cela a résolu le problème.

0 votes

Génie. Merci beaucoup. Je pensais que j'allais devoir changer ma JVM.

1 votes

Cela a fonctionné comme un charme sur Windows 10 avec Java 10.

24voto

oori Points 1663

Sur Mac/Linux, utilisez la commande suivante :

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Fonctionne pour les JDK 9 et 10, sans Parcheandotout Parcheando (sdkmanager, avdmanager).

Pour Java 11, voir : https://stackoverflow.com/a/51644855/798165

2 votes

Merci ! cela résout le problème lorsque vous avez installé jdk 9

14voto

SherylHohman Points 3894

J'ai trouvé deux réponses qui ont fonctionné pour moi, sans devoir désinstaller JDK 10 (ou 9), dont j'ai besoin pour create-react-app . Les JDK 9 et 10 sont incompatibles avec Android-sdk !


Siu Ching Pong -Asuka Kenji- suggère de modifier le sdkmanager script, en remplaçant cette ligne :

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

avec :

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

Notez que ce mod sera écrasé lors de la mise à jour de sdkmanager.
Consultez son article et celui auquel il renvoie pour plus de détails.
Cette solution était également l'une des solutions mentionnées dans le présent document. Fil de discussion github .


Le poste de l'Allemand indique la source du conflit, et présente la correction qui ne sera pas écrasée par les mises à jour.
Il suggère de renommer /Library/Java/JavaVirtualMachines/Info.plist comme un moyen de le cacher du script qui cherche la plus haute version de Java qui réside sur votre système. De cette façon, le JDK 8 est renvoyé par défaut.
En se référant explicitement à JDK 10, ou en le paramétrant sur $JAVA_HOME vous pouvez utiliser le JDK 10, au lieu de la version par défaut, si nécessaire.
Les détails sont dans son post.

1 votes

Cela a parfaitement fonctionné, c'est la meilleure solution à mon avis, car elle ne vous oblige pas à mettre à jour votre version de Java.

0 votes

D'une manière ou d'une autre, après avoir beaucoup expérimenté l'ao. Android Studio, ce problème a disparu et la nouvelle erreur était Could not find or load main class java.se.ee - En inversant le DEFAULT_JVM_OPTS, le problème a été résolu et le problème précédent a disparu

3 votes

Malheureusement, cela ne fonctionne pas maintenant. Le résultat est le suivant : Une erreur s'est produite pendant l'initialisation de la couche de démarrage java.lang.module.FindException : Module java.se.ee non trouvé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X