xmlelement manager jaxbexception annotation java android android-sdk-tools java-9 android-sdk-manager

manager - java lang noclassdeffounderror javax xml ws service



Error al ejecutar sdkmanager--list(Android SDK) con Java 9 (9)

Al tener Java 11 en el sistema, las soluciones proporcionadas no son válidas.

Esto -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or --add-modules java.xml.bind no funcionan con Java 11 en Mac OS.

Por esa razón, debe degradar la versión de Java a la versión 8 desde aquí: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Lista de versiones de Java instaladas

/usr/libexec/java_home -V

Java 11

export JAVA_HOME=$(/usr/libexec/java_home -v 11)

Java 1.8

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Luego ve a

cd ~/Library/Android/sdk/tools/bin

y

./sdkmanager --licenses

Descargué e instalé:

  • JDK ( jdk-9.0.1_osx-x64_bin.dmg ) de Oracle here
  • Android SDK ( sdk-tools-darwin-3859397.zip ) de Google here .

Después de configurar la variable PATH , intenté ejecutar sdkmanager , que reemplazó el comando de android para administrar los componentes del SDK. Sin embargo, falló como se muestra aquí:

$ sdkmanager --list 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

Aquí está la versión de Java:

$ java -version java version "9.0.1" Java(TM) SE Runtime Environment (build 9.0.1+11) Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

¿Alguien sabe cómo solucionarlo sin volver a Java 8?

preguntas relacionadas

  • Error al instalar android-sdk
    • Esta publicación hizo una pregunta similar. Sin embargo, la publicación está cerrada y la única respuesta sugiere volver a Java 8.

Como leemos en los comentarios anteriores, este error se produce porque la versión actual del SDK es incompatible con las versiones más recientes de Java: 9 y 10.

Entonces, para resolverlo, puede degradar su versión de Java al Java 8 o, como solución alternativa, puede exportar la siguiente opción en su terminal:

Linux:

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

Ventanas :

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

Esto resolverá este error para el sdkmanager

Y para que se guarde permanentemente, puede exportar JAVA_OPTS en su archivo de perfil en Linux ( .zshrc , .bashrc y etc.) o agregarlo como variable de entorno de forma permanente 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


Con la ayuda de esta respuesta , resolví el problema con éxito.

Vamos a aplicar una solución en sdkmanager . Es un script de shell. Se encuentra en $android_sdk/tools/bin , donde $android_sdk es donde descomprimió el SDK de Android.

  1. Abra sdkmanager en su editor favorito.
  2. Localice la línea que establece la variable DEFAULT_JVM_OPTS . En mi copia, está en la línea 31:

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

  3. Agregue las siguientes opciones a la variable: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee Por favor, preste atención a las citas. En mi copia, la línea se convierte en:

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

  4. Guarde el archivo y salga del editor.
  5. Ejecute el comando nuevamente.

Aquí está el resultado:

$ sdkmanager --list Installed packages: Path | Version | Description | Location ------- | ------- | ------- | ------- tools | 26.0.1 | Android SDK Tools 26.0.1 | tools/ Available Packages: Path | Version | Description ------- | ------- | ------- add-ons;addon-g..._apis-google-15 | 3 | Google APIs add-ons;addon-g..._apis-google-16 | 4 | Google APIs add-ons;addon-g..._apis-google-17 | 4 | Google APIs add-ons;addon-g..._apis-google-18 | 4 | Google APIs add-ons;addon-g..._apis-google-19 | 20 | Google APIs add-ons;addon-g..._apis-google-21 | 1 | Google APIs add-ons;addon-g..._apis-google-22 | 1 | Google APIs add-ons;addon-g..._apis-google-23 | 1 | Google APIs add-ons;addon-g..._apis-google-24 | 1 | Google APIs ...

¡Hola! ¡Funciona!

- Editar: 2017-11-07 -

Tenga en cuenta que es posible que deba aplicar la solución anterior nuevamente después de ejecutar sdkmanager --update , ya que el sdkmanager shell sdkmanager puede sdkmanager si se actualiza el paquete de tools .

Respuestas relacionadas

  • https://.com/a/43574427/142239
    • @ andy-guibert señaló las opciones necesarias para que esto funcione. También explica brevemente qué significan esas misteriosas opciones.


Me costó encontrar esta solución simplemente agregando el sdkmanager.bat que funciona

@if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem sdkmanager startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME%.. @rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0/.." @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no ''java'' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* :execute @rem Setup the command line set CLASSPATH=%APP_HOME%/lib/sdklib-25.3.1.jar;%APP_HOME%/lib/layoutlib-api-25.3.1.jar;%APP_HOME%/lib/dvlib-25.3.1.jar;%APP_HOME%/lib/repository-25.3.1.jar;%APP_HOME%/lib/gson-2.2.4.jar;%APP_HOME%/lib/commons-compress-1.8.1.jar;%APP_HOME%/lib/httpclient-4.1.1.jar;%APP_HOME%/lib/httpmime-4.1.jar;%APP_HOME%/lib/common-25.3.1.jar;%APP_HOME%/lib/kxml2-2.3.0.jar;%APP_HOME%/lib/annotations-25.3.1.jar;%APP_HOME%/lib/annotations-12.0.jar;%APP_HOME%/lib/jimfs-1.1.jar;%APP_HOME%/lib/httpcore-4.1.jar;%APP_HOME%/lib/commons-logging-1.1.1.jar;%APP_HOME%/lib/commons-codec-1.4.jar;%APP_HOME%/lib/guava-18.0.jar @rem Execute sdkmanager "%JAVA_EXE%" %DEFAULT_JVM_OPTS% -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.SdkManagerCli %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega


Para Windows, si nada funciona, intente esto:

  • Abra sdkmanager.bat con el Bloc de notas.

  • Localice la siguiente línea:

    %JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%

  • Agregue --add-modules java.xml.bind

La línea modificada debería verse así:

%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%


Pude resolver el problema mediante el uso de un archivo editado sdkmanager.bat obligando a utilizar el Java incrustado dentro de Android Studio, que supongo que utiliza OpenJDK 8. Aquí está el sdkmanager editado que utilicé:

@if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem sdkmanager startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME%.. @rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0/.." @rem find Java from Android Studio @rem Find java.exe if defined ANDROID_STUDIO_JAVA_HOME goto findJavaFromAndroidStudioJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init goto findJavaNormally :findJavaFromAndroidStudioJavaHome set JAVA_HOME=%ANDROID_STUDIO_JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init goto findJavaNormally @rem java from java home @rem Find java.exe :findJavaNormally if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init goto javaError :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init goto javaDirectoryError :javaError echo. echo ERROR: JAVA_HOME is not set and no ''java'' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :javaDirectoryError echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* :execute @rem Setup the command line set CLASSPATH=%APP_HOME%/lib/dvlib-26.0.0-dev.jar;%APP_HOME%/lib/jimfs-1.1.jar;%APP_HOME%/lib/jsr305-1.3.9.jar;%APP_HOME%/lib/repository-26.0.0-dev.jar;%APP_HOME%/lib/j2objc-annotations-1.1.jar;%APP_HOME%/lib/layoutlib-api-26.0.0-dev.jar;%APP_HOME%/lib/gson-2.3.jar;%APP_HOME%/lib/httpcore-4.2.5.jar;%APP_HOME%/lib/commons-logging-1.1.1.jar;%APP_HOME%/lib/commons-compress-1.12.jar;%APP_HOME%/lib/annotations-26.0.0-dev.jar;%APP_HOME%/lib/error_prone_annotations-2.0.18.jar;%APP_HOME%/lib/animal-sniffer-annotations-1.14.jar;%APP_HOME%/lib/httpclient-4.2.6.jar;%APP_HOME%/lib/commons-codec-1.6.jar;%APP_HOME%/lib/common-26.0.0-dev.jar;%APP_HOME%/lib/kxml2-2.3.0.jar;%APP_HOME%/lib/httpmime-4.1.jar;%APP_HOME%/lib/annotations-12.0.jar;%APP_HOME%/lib/sdklib-26.0.0-dev.jar;%APP_HOME%/lib/guava-22.0.jar @rem Execute sdkmanager "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega

Aquí utilicé una variable ambiental ANDROID_STUDIO_JAVA_HOME que en realidad apunta al JRE integrado en el estudio de Android, por ejemplo: ../android_studio/jre

Esto también tiene un respaldo a JAVA_HOME si ANDROID_STUDIO_JAVA_HOME no está configurado.


Puede configurar las opciones de sdkmanager con SDKMANAGER_OPTS.

Ejemplo:

export SDKMANAGER_OPTS="--add-modules java.se.ee" sdkmanager --list


https://adoptopenjdk.net actualmente admite todas las distribuciones de JDK desde la versión 8 en adelante. Por ejemplo https://adoptopenjdk.net/releases.html#x64_win

Aquí hay un ejemplo de cómo pude usar JDK versión 8 con sdkmanager y mucho más: https://travis-ci.com/mmcc007/screenshots/builds/109365628

Para JDK 9 (y creo que 10, y posiblemente 11, pero no 12 y más), lo siguiente debería funcionar para que sdkmanager funcione:

export SDKMANAGER_OPTS="--add-modules java.se.ee" sdkmanager --list