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)
/Library/Java/JavaVirtualMachines
openjdk-8-jdk
etopenjdk-11-jdk
. Quelqu'un sait-il pour quoi installerjavax/xml/bind/annotation/XmlSchema
ou comment éviterjavax/xml/bind/annotation/XmlSchema
dans le NDK?Réponses:
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.
brew cask uninstall java
# désinstaller java9brew tap homebrew/cask-versions
brew cask install java8
# installer java8touch ~/.android/repositories.cfg
# sans ce fichier, une erreur se produira à l'étape suivantebrew cask install android-sdk
la source
brew cask install homebrew/cask-versions/java8
brew cask install homebrew/cask-versions/adoptopenjdk8
semble fonctionnerPour résoudre cette erreur, vous pouvez rétrograder votre version Java.
Ou exporte l'option suivante sur votre terminal:
Linux / MAC:
Windows :
Et pour l'enregistrer de manière permanente, vous pouvez exporter le
JAVA_OPTS
dans votre fichier de profil sur Linux (.zshrc
,.bashrc
etc.) ou l'ajouter en tant que variable d'environnement de manière permanente sur Windows.ps. Cela ne fonctionne pas pour Java 11+, qui n'a pas de modules Java EE. Pour cette option est une bonne idée, rétrograder votre version Java ou attendre une mise à jour Flutter .
Réf: JDK 11: Fin de route pour les modules Java EE
la source
Cela a résolu le problème sur Windows pour moi.
Source 1 , source 2
la source
export
passet
) et cela a résolu le problème.export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
sur Ubuntu 18.04Si vous ne voulez pas changer votre version de Java (je ne le fais pas), vous pouvez temporairement changer la version dans votre shell:
Première exécution
Ensuite, choisissez une version majeure si vous l'avez installée, sinon installez-la d'abord:
Vous pouvez maintenant exécuter sdkmanager.
la source
$ /usr/libexec/java_home -V
donnebash: /usr/libexec/java_home: No such file or directory
.apt-file search /usr/libexec/java_home
ne donne exactement rien.echo "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc
(ou profil si vous utilisez le profil) - recharger:. ~/.bashrc
/usr/libexec
plus. Êtes-vous sur MacOS? (Je suis sur Ubuntu / Linux et Ubuntu / Windows)Sur Mac / Linux, utilisez la commande suivante:
Fonctionne à la fois pour JDK 9 et 10, sans patcher aucun script (sdkmanager, avdmanager).
Pour Java 11, voir: https://stackoverflow.com/a/51644855/798165
la source
J'ai trouvé deux réponses qui ont fonctionné pour moi, sans avoir à désinstaller JDK 10 (ou 9), dont j'ai besoin
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:avec:
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 ce fil de discussion sur les problèmes de github .
La publication de German 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
comme moyen de le masquer du script qui recherche la version la plus élevée de Java résidant sur votre système. De cette manière, JDK 8 est renvoyé par défaut.En vous référant à JDK 10 explicitement, ou en le définissant sur
$JAVA_HOME
, vous pouvez utiliser JDK 10, au lieu de la valeur par défaut, chaque fois que nécessaire.Les détails sont dans son message.
la source
Could not find or load main class java.se.ee
- le rétablissement de DEFAULT_JVM_OPTS a résolu ce problème et le problème précédent a disparu ..Vous devez ajouter les éléments suivants à votre profil (fonctionne sur MacOS):
Pas besoin de patcher quoi que ce soit.
la source
Installez simplement JDK version 8 et sélectionnez-le par défaut en utilisant:
la source
Mise à jour 2019-10:
Comme indiqué dans le suivi des problèmes , Google a travaillé sur une nouvelle version des outils de ligne de commande du SDK Android qui fonctionne sur les JVM actuelles (9, 10, 11+) et ne dépend pas des modules JAXB EE obsolètes!
Vous pouvez télécharger et utiliser les nouveaux outils de ligne de commande du SDK Android dans Android Studio ou en les téléchargeant manuellement à partir des serveurs Google:
Pour les dernières versions, vérifiez les URL dans le repository.xml .
Si vous décompressez manuellement les outils de ligne de commande, veillez à les placer dans un sous-dossier de votre
$ANDROID_HOME
(par exemple$ANDROID_HOME/cmdline-tools/...
).la source
Étrangement Java9 n'est pas compatible avec android-sdk
Combiné toutes les commandes en une seule pour une référence facile:
la source
Puisque Java 11 a supprimé JavaEE, vous devrez 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
Puis éditez sdkmanager.bat pour que l' ensemble CLASSPATH = ... se termine par ;% CLASSPATH%
Définissez CLASSPATH pour inclure JAXB et JAF:
Ensuite, sdkmanager.bat fonctionnera.
la source
J'ai fait face au même problème. Bien que je sois un peu développeur rétro-daté (J'utilise toujours Windows pour développer: P)
Pour résoudre ce problème sous Windows :
ÉTAPE 1: Installez jdk 8 s'il n'a pas été installé (jdk 9 ou 11 ne fonctionne pas mais vous pouvez les installer pour les utiliser dans d'autres utilisations de développement).
Très simple avec Chocolatey:
(Si installé avec Chocolatey, ignorez les étapes 2 et 3)
ÉTAPE 2: Accédez aux paramètres des variables d'environnement et définissez JAVA_HOME sur le répertoire d'installation de jdk 8.
ÉTAPE 3: Accédez à la variable de chemin et ajoutez le répertoire bin de jdk 8 et déplacez-le vers le haut.
ÉTAPE 4: fermez toutes les sessions de terminal ouvertes et redémarrez une nouvelle session
ÉTAPE OPTIONNELLE 5: En fonction de votre objectif dans l'exécution du terminal (il peut être nécessaire d'ajouter sdkmanager au chemin ou simplement naviguer vers le répertoire):
C'est tout! : O Profitez de flottement! :RÉ
la source
J'ai rencontré le même problème lors de l'exécution:
Je l'ai résolu comme
Changer Java pour utiliser 1.8
Ensuite, la même commande fonctionne bien
la source
Pour Windows, désinstallez le JDK s'il est supérieur à 1.8.172. Installez JDK 1.8.172
J'étais confronté au même problème dans Windows 10 avec java 10. J'ai désinstallé le java 10 et installé java8, il fonctionne très bien pour moi maintenant :)
la source
Pour les utilisateurs de Linux (j'utilise une Debian Distro, Kali) Voici comment j'ai résolu le mien.
Si vous n'avez pas encore 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 Move et décompressez-le à un endroit approprié comme celui-ci
Vous devriez obtenir un dossier décompressé comme jdk1.8.0_191 Vous pouvez ensuite supprimer l'archive tar pour économiser de l'espace
Étape 2 - Configuration d'alternatives à l'emplacement Java par défaut
Étape 3 - Sélection de vos alternatives par défaut
Étape 4 - Confirmation de la version Java par défaut
Remarques
la source
Exécutez les commandes
java -version
etjavac -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
PATH
variable pour qu'elle ne pointe que vers un seul JDK. Si vous ne savez pas comment procéder, désinstallez simplement toutes les autres instances Java à l'exception de Java 8 (Ajout / Suppression de programmes sous Windows). Comme pour aujourd'hui, Unity et Android vous recommandent d'utiliser JDK 8.Avec Java 8, il n'est pas nécessaire d'exporter le
java.se.ee
module comme indiqué dans certaines des autres réponses. Vous pouvez également supprimer l'uneJAVA_OPTS
ou l'autre des variables d'environnement que vous avez définies.la source
J'ai récemment résolu ce problème en désinstallant la version supérieure de JDK et en installant JDK 8. Après avoir installé le JDK, vous devez indiquer le chemin. Ensuite, vous devez ouvrir l'invite de commande dans "C: \ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools" et exécuter "sdkmanager --update" qui mettra à jour votre sdk, puis vous devez exécuter "flutter doctor - -android-licenses "dans cmd et accepter toutes les licences.
Maintenant, votre problème devrait être résolu.
la source
Dans mon cas, j'ai besoin à la fois de JDK 8 (en essayant d'utiliser le gestionnaire AVD et SDK dans Qt sous ubuntu) et 11 pour différents outils. La suppression de la version 11 n'est pas une option.
Les solutions 'JAVA_OPTS' n'ont rien fait. Je n'aime pas vraiment l'export JAVA_HOME, car cela pourrait vous forcer à lancer n'importe quel outil appelant ces utils à partir du même shell (comme Qt), ou vous forcer à rendre ce permanent, ce qui n'est pas pratique.
Donc, pour moi, la solution est assez simple. Ajoutez quelque chose comme ça dans la deuxième ligne de ~ / Android / tools / bin / sdkmanager et ~ / Android / tools / bin / avdmanager:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(ou quel que soit le chemin d'accès à votre rev 8 jdk).
Avec cela, ces outils de ligne de commande fonctionnent en mode autonome, ils fonctionnent également lorsqu'ils sont appelés par d'autres outils tels que Qt, et jdk 11 est toujours le système par défaut pour les autres. Pas besoin de mélanger les bibliothèques etc ...
Le seul inconvénient est que toute mise à jour de ces outils de ligne de commande effacera ces modifications, que vous devrez réintroduire.
la source
Rétrogradez votre version java, quel que soit le système ou l'idée.
Assurez-vous que la version java n'est pas supérieure à 8
Dans mon cas, je change la version ide java, cela résout mon problème.
la source
Lorsque votre Android stuio / jre utilise une version différente de java, vous recevrez cette erreur. pour le résoudre, réglez simplement Android studio / jre sur votre JAVA_HOME. et désinstallez votre propre fichier java.
la source
Pour moi, j'installe la version java 8 et je sélectionne simplement la version java dans "JDK location":
la source
Pour ma situation, j'utilise sdkman pour gérer plusieurs versions de java. J'ai mis la version java par défaut à 13. Installez la version 8 et maintenant cela fonctionne très bien.
la source
Le meilleur moyen est d'utiliser la commande ci-dessous
Exécutez maintenant la version adb pour vérifier qu'elle a été mise à jour.
la source