java android java-9

Error al instalar android-sdk: "java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema"



java-9 (16)

Al instalar las herramientas de Android SDK, se emite el siguiente error:

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

¿Por qué sucede esto y cómo se puede solucionar?

Salida de depuración:

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


Baje la versión de Java. Cualquiera sea el sistema o ide.

Asegúrese de que la versión de Java no sea superior a 8

En mi caso, cambio la versión de ide java. Esto resuelve mi problema.



Cuando su Android stuio / jre usa una versión diferente de java, recibirá este error. para resolverlo, solo configure Android studio / jre en su JAVA_HOME. y desinstale su propio java.


Debe agregar lo siguiente a su Perfil (Funciona en MacOS):

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

No es necesario parchear nada.


Ejecute los comandos java -version y javac -version en una línea de comandos para asegurarse de que provienen del mismo JDK (por ejemplo: versión 1.8.0_181)

De lo contrario, debe modificar la variable PATH para que solo apunte a un solo JDK. Si no está seguro de cómo hacerlo, simplemente desinstale todas las demás instancias de Java excepto Java 8 (Agregar o quitar programas en Windows). En cuanto a hoy, tanto Unity como Android recomiendan que use JDK 8.

Con Java 8, no es necesario exportar el módulo java.se.ee como se muestra en algunas de las otras respuestas. También puede eliminar cualquier JAVA_OPTS u otras variables de entorno que haya establecido.


En el uso de Mac / Linux:
export JAVA_OPTS=''-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee''

Funciona para JDK 9 y 10, sin parchear ningún script (sdkmanager, avdmanager)


Encontré dos respuestas que me funcionaron, sin tener que desinstalar JDK 10 (o 9), que necesito para create-react-app . ¡Tanto JDK 9 como 10 son incompatibles con android-sdk!

Siu Ching Pong -Asuka Kenji- sugiere modificar el script sdkmanager , reemplazando esta línea:

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

con:

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

Tenga en cuenta que este mod se sobrescribirá al actualizar sdkmanager.
Echa un vistazo a su publicación, y a la que está vinculado, para más detalles.
Esta solución también fue una de las soluciones mencionadas en este hilo de problemas de github .

La publicación de German indica la fuente del conflicto y presenta una solución que las actualizaciones no sobrescribirán.
Sugiere cambiar el nombre de /Library/Java/JavaVirtualMachines/Info.plist como un medio para ocultarlo del script que busca la versión más alta de Java que reside en su sistema. De esta forma, JDK 8 se devuelve como predeterminado.
Refiriéndose a JDK 10 explícitamente, o configurándolo en $JAVA_HOME , puede usar JDK 10, en lugar del predeterminado, siempre que sea necesario.
Los detalles están en su publicación.


Extrañamente Java9 no es compatible con 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ó todos los comandos en uno para una referencia fácil:

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


Para la máquina Windows, desinstale el JDK si es más de 1.8.172. Instalar JDK 1.8.172

Estaba enfrentando el mismo problema en Windows 10 con Java 10. Desinstalé el Java 10 e instalé Java8, funciona bien para mí ahora :)


Para resolver este error, puede degradar su versión de Java.

O exporta la siguiente opción en su terminal:

Linux / MAC:

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

Ventanas :

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

Y para guardarlo permanentemente, puede exportar JAVA_OPTS en su archivo de perfil en Linux ( .zshrc , .bashrc y etc.) o agregarlo como entorno permanentemente en Windows.

PD. Esto no funciona para Java 11+, que no tiene módulos Java EE. Para esta opción es una buena idea, degradar su versión de Java o esperar una update Flutter.

Ref: JDK 11: Fin del camino para módulos Java EE


Para usuarios de Linux (estoy usando una distribución de Debian, Kali) Así es como resolví la mía.

Si aún no tiene jdk-8, desea obtenerlo en el sitio de Oracle

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Tengo el jdk-8u191-linux-x64.tar.gz

Paso 1 - Instalar Java Move y descomprimirlo en una ubicación adecuada como esta

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

Debería obtener una carpeta descomprimida como jdk1.8.0_191. Luego puede eliminar el tarball para ahorrar espacio

Paso 2: configuración de alternativas a la ubicación predeterminada de 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

Paso 3: seleccionar las alternativas como predeterminadas

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

Paso 4: confirmar la versión predeterminada de Java

$ java -version

Notas

  1. En el artículo original aquí: https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux , también se configuró el complemento predeterminado para mozilla. Supongo que realmente no necesitamos los complementos, ya que simplemente estamos tratando de desarrollar para Android.
  2. Como en la respuesta de @ spassvogel, también debe colocar un archivo @ repositories.cfg en su directorio ~ / .android, ya que es necesario para actualizar las listas de repositorios de herramientas
  3. Mover algunas cosas puede requerir autoridad de raíz. Usa sudo sabiamente.
  4. Para el uso de sdkmanager, consulte la guía oficial: https://developer.android.com/studio/command-line/sdkmanager

Se encontró con el mismo problema al ejecutar

$ / Users // Library / Android / sdk / tools / bin / sdkmanager "plataformas; android-28" "build-tools; 28.0.3"

Lo resolvió como $ 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

Cambiar Java para usar 1.8

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

Luego, el mismo comando funciona bien $ / Users // Library / Android / sdk / tools / bin / sdkmanager "plataformas; android-28" "build-tools; 28.0.3"


Si no quieres cambiar tu versión de Java (yo no). Puede cambiar temporalmente la versión en su shell:

primer intento

/usr/libexec/java_home -V

luego elija una versión principal si la tiene instalada; de lo contrario, instálela primero:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

Ahora puedes ejecutar sdkmanager


Simplemente instale JDK versión 8 y selecciónelo como predeterminado usando:

sudo update-alternatives --config java


Tuve un problema similar esta mañana (tratando de construir para Android usando Unity3D). Terminé desinstalando JDK9 e instalando Java SE Development Kit 8u144 . Espero que esto ayude.

  1. brew cask uninstall java # desinstalar java9
  2. brew tap caskroom/versions
  3. brew cask install java8 # install java8
  4. touch ~/.android/repositories.cfg # sin este archivo, se producirá un error en el siguiente paso
  5. brew cask install android-sdk

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

Esto solucionó el problema en Windows para mí.

Fuente 1 , fuente 2