Подтвердить что ты не робот

Не удалось установить android-sdk: "java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema"

При установке средств Android sdk испускается следующее сообщение об ошибке:

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

Почему это происходит и как оно может быть исправлено?

Выход отладки:

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

Ответ 1

У меня была аналогичная проблема сегодня утром (попытка создать для Android с помощью Unity3D). В результате я удалил JDK9 и установил Java SE Development Kit 8u144. Надеюсь, это поможет.

  • brew cask uninstall java # удалить java9
  • brew tap caskroom/versions
  • brew cask install java8 # установить java8
  • touch ~/.android/repositories.cfg # без этого файла, ошибка будет происходить на следующем шаге
  • brew cask install android-sdk

Ответ 2

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

Это устранило проблему для Windows для меня.

Источник 1, источник 2

Ответ 3

Чтобы устранить эту ошибку, вы можете понизить версию Java.

Или экспортирует следующую опцию на вашем терминале:

Linux/MAC:

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

Windows:

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

И чтобы сохранить его навсегда, вы можете экспортировать JAVA_OPTS в файл своего профиля в Linux (.zshrc, .bashrc и т.д.) Или добавить в качестве среды навсегда в Windows.


пс. Это не работает для Java 11+, в которой нет модулей Java EE. Для этой опции хорошая идея, понизьте версию Java или дождитесь обновления Flutter.

Ссылка: JDK 11: Конец пути для модулей Java EE

Ответ 4

В Mac/Linux:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Работает как для JDK 9, так и 10, без исправления какого-либо скрипта (sdkmanager, avdmanager)

Ответ 5

Я нашел два ответа, которые работали для меня, без необходимости удаления JDK 10 (или 9), которые мне нужны для create-react-app. Оба JDK 9 и 10 несовместимы с android-sdk!


Siu Ching Pong -Asuka Kenji- предлагает изменить скрипт sdkmanager, заменив эту строку:

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

с:

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

Обратите внимание, что этот мод будет перезаписан при обновлении sdkmanager.
Проверьте его сообщение и тот, на который он ссылается, для получения более подробной информации.
Это решение было также одним из решений, упомянутых в этом потоке ответов github.


Немецкая почта указывает на источник конфликта и представляет исправления, которые не будут перезаписаны обновлениями.
Он предлагает переименовать /Library/Java/JavaVirtualMachines/Info.plist как средство скрытия его от скрипта, который ищет самую высокую версию Java, которая находится в вашей системе. Таким образом, JDK 8 возвращается по умолчанию.
Ссылаясь на JDK 10 явно или устанавливая его в $JAVA_HOME, вы можете использовать JDK 10, а не по умолчанию, когда это необходимо.
Подробности в его посте.

Ответ 6

Вам необходимо добавить в свой профиль (работает в MacOS) следующее:

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

Не нужно ничего исправлять.

Ответ 7

Странно Java9 не совместим с 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

Объединение всех команд в один для удобства:

$ 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

Если вы не хотите менять свою версию Java (я этого не делаю). Вы можете временно изменить версию в своей оболочке:

первый забег

/usr/libexec/java_home -V

затем выберите основную версию, если вы ее установили, иначе установите ее в первую очередь:

export JAVA_HOME='/usr/libexec/java_home -V 1.8'

Теперь вы можете запустить sdkmanager

Ответ 9

Просто установите JDK версии 8 и выберите его по умолчанию, используя:

sudo update-alternatives --config java

Ответ 10

Поскольку Java 11 удалила JavaEE, вам нужно скачать несколько jar файлов и добавить в путь к классам:

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

JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html

Затем отредактируйте sdkmanager.bat так, чтобы настройка CLASSPATH =... заканчивалась на ;% CLASSPATH%

Установите CLASSPATH, чтобы включить JAXB и JAF:

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

Тогда sdkmanager.bat будет работать.

Ответ 11

Для Windows-машины удалите JDK, если его более 1,8.172. Установить JDK 1.8.172

Я столкнулся с той же проблемой в Windows 10 с java 10. Я удалил java 10 и установил java8 для меня сейчас отлично. :)

Ответ 12

Запустите java -version и javac -version команды в командной строке, чтобы убедиться, что они происходят из одного JDK (например: версия 1.8.0_181)

Если нет, вы должны изменить PATH так, чтобы она указывала только на один JDK. Если вы не знаете, как это сделать, просто удалите все другие экземпляры Java, кроме Java 8 ("Установка и удаление программ в Windows"). На сегодняшний день как Unity, так и Android рекомендуют использовать JDK 8.

В Java 8 нет необходимости экспортировать модуль java.se.ee как показано в некоторых других ответах. Вы также можете удалить любые JAVA_OPTS или другие переменные среды, которые вы установили.

Ответ 13

Для пользователей Linux (я использую Debian Distro, Kali) Вот как я решил мой.

Если у вас еще нет jdk-8, вы хотите получить его на сайте oracle

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

Я получил jdk-8u191-linux-x64.tar.gz

Шаг 1 - Установка Java Переместите и распакуйте его в подходящем месте

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

Вы должны получить распакованную папку, например, jdk1.8.0_191. Вы можете удалить архив после сохранения пространства

Шаг 2 - Настройка альтернатив по умолчанию для 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

Шаг 3 - Выбор ваших альтернатив по умолчанию

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

Шаг 4 - Подтверждение версии java по умолчанию

$ java -version

Заметки

  1. В исходной статье здесь: https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux также был установлен плагин по умолчанию для mozilla. Я предполагаю, что нам действительно не нужны плагины, поскольку мы просто пытаемся разработать для Android.
  2. Как и в ответе @spassvogel, вы также должны поместить файл @repositories.cfg в свой каталог ~/.android, поскольку это необходимо для обновления списков репо инструментов
  3. Перемещение некоторых вещей может потребовать полномочий root. Используйте мудро мудро.
  4. Для использования sdkmanager см. Официальное руководство: https://developer.android.com/studio/command-line/sdkmanager

Ответ 14

Я столкнулся с той же проблемой при запуске:

$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"_

Я решил это как

$ 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

Измените Java на использование 1.8

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

Тогда та же команда работает нормально

$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"

Ответ 15

Понизьте вашу версию Java. Независимо от системы или ide.

Убедитесь, что версия Java не выше 8

В моем случае. Я изменяю ide java verion. Это решает мою проблему. enter image description here

Ответ 16

Когда ваш Android Stuio/JRE использует другую версию Java, вы получите эту ошибку. чтобы решить эту проблему, просто установите Android studio/jre в JAVA_HOME. и удалите свою собственную Java.