it-swarm.com.ru

Не удалось установить 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)
96
Novellizator

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

  1. brew cask uninstall Java # удалить Java9
  2. brew tap caskroom/versions
  3. brew cask install Java8 # установить Java8
  4. touch ~/.Android/repositories.cfg # без этого файла ошибка произойдет на следующем шаге
  5. brew cask install Android-sdk
96
spassvogel
set Java_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee

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

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

54
Tim Jenßen

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

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

Linux/MAC:

export Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

Окна :

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

50
coderade

На Mac/Linux используйте:
export Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

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

14
oori

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


Сиу Чинг Понг -Асука Кэндзи - предлагает изменить скрипт 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 вместо значения по умолчанию, когда это необходимо.
Подробности в его посте.

12
SherylHohman

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

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

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

9
Farsheed

Странно, но 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.
7
Well Smith

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

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

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

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

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

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

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

6
Peter Quiring

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

Sudo update-alternatives --config Java
5
Steven

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

первый забег

/usr/libexec/Java_home -V

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

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

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

4
Sarah A

Запустите команды 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 или другие переменные среды , которые вы установили.

1
Gayan Weerakutti

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

Я столкнулся с той же проблемой в Windows 10 с Java 10. Я удалил Java 10 и установил Java8, теперь он работает нормально для меня :)

1
Jagan

Для пользователей 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-Install-Java-on-Kali-Linux также был установлен плагин по умолчанию для Mozilla. Я предполагаю, что нам не нужны плагины, так как мы просто пытаемся разработать для Android.
  2. Как и в ответе @ spassvogel, вы также должны поместить файл @ repositories.cfg в каталог ~/.Android, поскольку это необходимо для обновления списков репозитория инструментов.
  3. Для перемещения некоторых вещей могут потребоваться полномочия root. Используйте Sudo с умом.
  4. Для использования sdkmanager см. Официальное руководство: https://developer.Android.com/studio/command-line/sdkmanager
1
Victor Fortman

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

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

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

0
anKotliner

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

$/Users // Библиотеки/Android/sdk/tools/bin/sdkmanager "платформы; Android-28" "build-tools; 28.0.3"

Решил это как $ echo $ Java_HOME /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home

$ ls/Библиотека/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 // Library/Android/sdk/tools/bin/sdkmanager "платформы; Android-28" "build-tools; 28.0.3"

0
Sandeep