При установке инструментов 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)
/Library/Java/JavaVirtualMachines
openjdk-8-jdk
иopenjdk-11-jdk
. Кто-нибудь знает, для чего устанавливатьjavax/xml/bind/annotation/XmlSchema
или как избежатьjavax/xml/bind/annotation/XmlSchema
в NDK?Ответы:
Сегодня утром у меня была похожая проблема (пытался собрать для Android с помощью Unity3D). В итоге я удалил JDK9 и установил Java SE Development Kit 8u144 . Надеюсь это поможет.
brew cask uninstall java
# uninstall java9brew tap homebrew/cask-versions
brew cask install java8
# установить java8touch ~/.android/repositories.cfg
# без этого файла ошибка произойдет на следующем шагеbrew cask install android-sdk
источник
brew cask install homebrew/cask-versions/java8
brew cask install homebrew/cask-versions/adoptopenjdk8
Кажется, работаетЧтобы устранить эту ошибку, вы можете понизить версию Java.
Или экспортирует следующую опцию на свой терминал:
Linux / MAC:
Windows :
И , чтобы сохранить его навсегда вы можете экспортирует
JAVA_OPTS
в своем профиле файл на Linux (.zshrc
,.bashrc
и т.д.) или добавить в качестве переменной окружения постоянно на Windows.пс. Это не работает для Java 11+, в которой нет модулей Java EE. Для этой опции хорошая идея, понизьте версию Java или дождитесь обновления Flutter .
Ссылка: JDK 11: Конец пути для модулей Java EE
источник
Это исправило проблему в Windows для меня.
Источник 1 , источник 2
источник
export
не используяset
), и это решило проблему.export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
над Ubuntu 18.04Если вы не хотите менять свою версию Java (я не хочу), вы можете временно изменить версию в вашей оболочке:
Первый забег
Затем выберите основную версию, если она установлена, иначе сначала установите ее:
Теперь вы можете запустить sdkmanager.
источник
$ /usr/libexec/java_home -V
даетbash: /usr/libexec/java_home: No such file or directory
.apt-file search /usr/libexec/java_home
ничего не даетecho "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc
(или профиль, если вы используете профиль) - перезагрузить:. ~/.bashrc
/usr/libexec
тоже нет . Вы на MacOS? (Я нахожусь на Ubuntu / Linux и Ubuntu / Windows)В Mac / Linux используйте следующую команду:
Работает как для JDK 9, так и для 10, без каких-либо исправлений для скрипта (sdkmanager, avdmanager).
Для Java 11 см .: https://stackoverflow.com/a/51644855/798165
источник
Я нашел два ответа, которые работали для меня, без необходимости удалять JDK 10 (или 9), который мне нужен
create-react-app
. JDK 9 и 10 несовместимы с Android-SDK!Сиу Чинг Понг - Асука Кэндзи - предлагает изменить
sdkmanager
скрипт, заменив эту строку:с участием:
Обратите внимание, что этот мод будет перезаписан при обновлении sdkmanager.
Проверьте его пост, и тот, на который он ссылается, для более подробной информации.
Это решение было также одним из решений, упомянутых в этой теме о проблемах github .
Пост Германии указывает источник конфликта и представляет исправление, которое не будет перезаписано обновлениями.
Он предлагает переименовать
/Library/Java/JavaVirtualMachines/Info.plist
как средство скрытия его от сценария, который ищет самую высокую версию Java, которая находится в вашей системе. Таким образом, JDK 8 возвращается по умолчанию.Ссылаясь на JDK 10 явно или установив его
$JAVA_HOME
, вы можете использовать JDK 10 вместо значения по умолчанию, когда это необходимо.Подробности в его посте.
источник
Could not find or load main class java.se.ee
исправление DEFAULT_JVM_OPTS исправило эту проблему, и предыдущая проблема исчезла.Вам необходимо добавить следующее в свой профиль (работает на MacOS):
Не нужно ничего исправлять.
источник
Просто установите JDK версии 8 и выберите его по умолчанию, используя:
источник
Обновление 2019-10:
Как указано в системе отслеживания проблем , Google работает над новым выпуском Инструментов командной строки Android SDK, который работает на текущих JVM (9, 10, 11+) и не зависит от устаревших модулей JAXB EE!
Вы можете загрузить и использовать новые инструменты командной строки Android SDK в Android Studio или загрузить их вручную с серверов Google:
Для получения последних версий проверьте URL-адреса внутри repository.xml .
Если вы вручную распаковываете инструменты командной строки, позаботьтесь о том, чтобы поместить их в подпапку внутри вашей
$ANDROID_HOME
(например$ANDROID_HOME/cmdline-tools/...
).источник
Странно, но Java9 не совместима с Android-SDK
Объедините все команды в одну для удобства:
источник
Поскольку 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:
Тогда sdkmanager.bat будет работать.
источник
Я столкнулся с той же проблемой. Хотя я немного отсталый разработчик (все еще использую windows для разработки: P)
Чтобы решить эту проблему на окнах :
ШАГ 1. Установите jdk 8, если он не был установлен (jdk 9 или 11 не работает, но вы можете установить их для использования в других целях).
Очень просто, используя Chocolatey:
(Если установлен с использованием Chocolatey, пропустите шаги 2 и 3)
ШАГ 2. Перейдите в настройки переменных среды и установите JAVA_HOME в каталог установки jdk 8.
ШАГ 3: Перейдите к переменной path, добавьте каталог bin в jdk 8 и переместите его в начало.
ШАГ 4: Закройте все открытые сеансы терминала и перезапустите новый сеанс
ДОПОЛНИТЕЛЬНЫЙ ШАГ 5: В зависимости от вашей цели при запуске терминала (может потребоваться добавить sdkmanager в путь или просто перейти в каталог):
Вот и все! : O Насладись трепетом! : D
источник
Я столкнулся с той же проблемой при запуске:
Я решил это как
Измените Java для использования 1.8
Тогда та же команда работает нормально
источник
Для Windows машина удалите JDK, если его больше, чем 1.8.172. Установите JDK 1.8.172
Я столкнулся с той же проблемой в windows 10 с java 10. Я удалил java 10 и установил java8, теперь он работает нормально для меня :)
источник
Для пользователей Linux (я использую Debian Distro, Kali) Вот как я решил свой.
Если у вас еще нет jdk-8, вы хотите получить его на сайте оракула
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Я получил jdk-8u191-linux-x64.tar.gz
Шаг 1 - Установка Java Move и распакуйте его в подходящем месте, как это
Вы должны получить разархивированную папку, такую как jdk1.8.0_191. После этого вы можете удалить архив, чтобы сэкономить место
Шаг 2 - Настройка альтернатив местоположению Java по умолчанию
Шаг 3 - Выбор альтернатив по умолчанию
Шаг 4 - Подтверждение версии Java по умолчанию
Ноты
источник
Запустите
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
или другие переменные среды, которые вы установили.источник
Недавно я решил эту проблему, удалив более высокую версию JDK и установив JDK 8. После установки JDK необходимо указать путь. Затем вам нужно открыть командную строку в «C: \ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools» и запустить «sdkmanager --update», который обновит ваш sdk, а затем вам нужно запустить «flutter doctor - -android-licenses "в cmd и принять все лицензии.
Теперь ваша проблема должна быть решена.
источник
В моем случае мне нужны JDK 8 (пытаюсь использовать менеджер AVD и SDK в Qt под Ubuntu) и 11 для разных инструментов. Удаление версии 11 не вариант.
Решения 'JAVA_OPTS' ничего не сделали. Мне не очень нравится экспорт JAVA_HOME, поскольку он может заставить вас запустить любой инструмент, вызывающий эти утилиты из той же оболочки (например, Qt), или заставить сделать его постоянным, что не удобно.
Так что для меня решение довольно простое. Добавьте что-то вроде этого во второй строке ~ / Android / tools / bin / sdkmanager и ~ / Android / tools / bin / avdmanager:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(или какой-либо путь к вашей версии 8 JDK).
При этом эти инструменты командной строки работают в автономном режиме, они также работают при вызове другими инструментами, такими как Qt, а jdk 11 по-прежнему является системной настройкой по умолчанию для других. Нет необходимости смешивать библиотеки и т.д.
Единственным недостатком является то, что любое обновление этих инструментов командной строки удалит эти изменения, которые вы должны будете вернуть обратно.
источник
Понизьте вашу версию Java. Независимо от системы или ide.
Убедитесь, что версия Java не выше 8
В моем случае. Я изменяю ide java verion. Это решает мою проблему.
источник
Когда ваш Android Stuio / JRE использует другую версию Java, вы получите эту ошибку. чтобы решить эту проблему, просто установите Android studio / jre на свой JAVA_HOME. и удалите свою собственную Java.
источник
Для меня я устанавливаю версию Java 8 и просто выбираю версию Java в «JDK location»:
источник
Для моих обстоятельств я использую sdkman для управления несколькими версиями Java. Я установил версию Java по умолчанию на 13. Установите версию 8, и теперь она работает нормально.
источник
Лучший способ - использовать приведенную ниже команду
Теперь запустите версию ADB, чтобы убедиться, что она обновлена.
источник