web-dev-qa-db-fra.com

Impossible d'installer Android-sdk: "Java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema"

Lors de l'installation des outils Android sdk, l'erreur suivante est générée:

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

Pourquoi cela se produit-il et comment peut-il être corrigé?

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

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 Java SE Development Kit 8u144 . J'espère que cela t'aides.

  1. brew cask 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
94
spassvogel
set Java_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee

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

Source 1 , source 2

61
Tim Jenßen

Pour résoudre cette erreur, vous pouvez rétrograder votre version Java.

Ou exporte 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'

Et pour le sauvegarder en permanence, vous pouvez exporter le Java_OPTS dans votre fichier de profil sous Linux (.zshrc, .bashrc et etc.) ou ajouter un environnement de manière permanente sous Windows.


ps. Cela ne fonctionne pas pour le Java 11+, qui n'a pas Java EE modules. Pour que cette option soit une bonne idée, rétrogradez votre version Java ou attendez un Flutter pdate .

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

57
coderade

Sur Mac/Linux, utilisez:
export Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

Fonctionne à la fois pour JDK 9 et 10, sans patcher un script (sdkmanager, avdmanager)

15
oori

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


Siu Ching Pong - Asuka Kenji - suggère de modifier le script sdkmanager, 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.
Découvrez son message et celui sur lequel il renvoie, pour plus de détails.
Cette solution était également l'une des solutions mentionnées dans ce thread de github issues .


Le message de l'allemand indique la source du conflit et présente un correctif qui ne sera pas écrasé par les mises à jour.
Il suggère de renommer /Library/Java/JavaVirtualMachines/Info.plist afin de le masquer à partir du script recherchant la version la plus récente de Java résidant sur votre système. De cette manière, JDK 8 est renvoyé par défaut.
En vous référant explicitement à JDK 10, ou en le définissant sur $Java_HOME, vous pouvez utiliser JDK 10 à la place de la valeur par défaut, si nécessaire.
Les détails sont dans son message.

12
SherylHohman

Vous devez ajouter les éléments suivants à votre profil (Fonctionne sous MacOS):

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

Pas besoin de patcher quoi que ce soit.

12
Farsheed

Étrangement, Java9 n'est pas compatible avec Android-sdk

$ 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

Combiné toutes les commandes en une seule pour faciliter la référence:

$ 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

Installez simplement JDK version 8 et sélectionnez-le par défaut en utilisant:

Sudo update-alternatives --config Java
7
Steven

Si vous ne voulez pas changer votre version de Java (je ne le fais pas). Vous pouvez modifier temporairement la version dans votre shell:

première exécution

/usr/libexec/Java_home -V

puis choisissez une version majeure si vous l'avez installée, sinon installez-la d'abord:

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

Maintenant vous pouvez lancer sdkmanager

7
Sarah A

Puisque Java 11 a supprimé JavaEE, vous devez télécharger des fichiers JAR et les ajouter au chemin de classe:

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

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

Editez ensuite sdkmanager.bat de sorte que définissez CLASSPATH = ... se termine par ;% CLASSPATH%

Définissez CLASSPATH pour inclure JAXB et JAF:

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

Ensuite, sdkmanager.bat fonctionnera.

6
Peter Quiring

Exécutez les commandes Java -version et javac -version dans une ligne de commande pour vous assurer qu'elles proviennent du même JDK (par exemple: version 1.8.0_181).

Sinon, vous devez modifier la variable PATH afin qu'elle ne pointe que sur un seul JDK. Si vous ne savez pas comment procéder, désinstallez toutes les autres instances Java, à l'exception de Java 8 (Ajout/Suppression de programmes sous Windows). À l’heure actuelle, Unity et Android vous recommandent d’utiliser JDK 8.

Avec Java 8, il n’est pas nécessaire d’exporter le module Java.se.ee comme indiqué dans certaines des autres réponses. Vous pouvez également supprimer tout Java_OPTS ou autre variables d'environnement que vous avez défini.

1
Gayan Weerakutti

Pour la machine Windows, désinstallez le JDK s'il est supérieur à 1.8.172. Installer le JDK 1.8.172

Je faisais face au même problème dans Windows 10 avec Java 10. J'ai désinstallé le Java 10 et installé Java8, il fonctionne parfaitement pour moi maintenant :)

1
Jagan

Pour les utilisateurs de Linux (j'utilise une distribution Debian, Kali) Voici comment j'ai résolu le mien.

Si vous ne possédez pas déjà jdk-8, vous voulez l'obtenir sur le site d'Oracle

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

J'ai le jdk-8u191-linux-x64.tar.gz

Étape 1 - Installation de Java Déplacez-le et décompressez-le à un emplacement approprié, comme ceci

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

Vous devriez obtenir un dossier non compressé comme jdk1.8.0_191. Vous pouvez ensuite supprimer l’archive pour économiser de l’espace.

Étape 2 - Configuration des alternatives à l'emplacement par défaut 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

Étape 3 - Sélection de vos alternatives par défaut

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

Étape 4 - Confirmation de la version par défaut de Java

$ Java -version

Remarques

  1. Dans l'article original ici: https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux , le plug-in par défaut pour mozilla a également été défini. Je suppose que nous n'avons pas vraiment besoin des plugins, nous essayons simplement de développer pour Android.
  2. Comme dans la réponse de @ spassvogel, vous devez également placer un fichier @ repositories.cfg dans votre répertoire ~/.Android, car cela est nécessaire pour mettre à jour les listes de référentiels d'outils.
  3. Le déplacement de certaines choses peut nécessiter une autorité racine. Utilisez Sudo à bon escient.
  4. Pour utiliser sdkmanager, voir le guide officiel: https://developer.Android.com/studio/command-line/sdkmanager
1
hugovicfortman

Déclassez votre version Java version.

Assurez-vous que la version de Java n’est pas supérieure à 8.

Dans mon cas, je change le ide Java verion.Cela résout mon problème. enter image description here

0
anKotliner

A couru dans le même problème lors de l'exécution

$/Utilisateurs // Bibliothèque/Android/sdk/tools/bin/sdkmanager "plates-formes; Android-28" "build-tools; 28.0.3"

Résolu en tant que $ echo $ Java_HOME /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home

$ ls/Bibliothèque/Java/JavaMachines Virtuelles /

jdk-11.0.1.jdk
jdk1.8.0_202.jdk

Change Java pour utiliser 1.8

$ export Java_HOME = '/ Bibliothèque/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Sommaire/Accueil'

Ensuite, la même commande se déroule parfaitement $/Utilisateurs // Bibliothèque/Android/sdk/tools/bin/sdkmanager "plateformes; Android-28" "build-tools; 28.0.3"

0
Sandeep

Lorsque votre Android stuio/jre utilise une version différente de Java, vous recevrez cette erreur. pour le résoudre, il suffit de définir Android studio/jre sur votre Java_HOME. et désinstaller votre propre Java.

0
Licat Julius