Ошибка установки 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)
==> 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)
Дополнительная информация:
Я использую Java 9, и, как я понял, проблема может быть связана с отсутствием модуля javax.xml.bind
, который был удален в этой версии Java. Я попытался установить Android SDK с помощью Homebrew, но сталкиваюсь с этой ошибкой. Как решить эту проблему и успешно установить Android SDK?
5 ответ(ов)
Если вы используете Mac OS и не хотите изменять свою Java-версию (я, например, не хочу), вы можете временно изменить версию в своем терминале:
Сначала выполните команду:
/usr/libexec/java_home -V
Затем выберите основную версию, если у вас она установлена, в противном случае сначала установите ее:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Теперь вы можете запускать sdkmanager.
Если вы используете Linux, простым вариантом является установка JDK версии 8, а затем выбор его в качестве используемой по умолчанию версии, выполнив следующую команду:
sudo update-alternatives --config java
Эта команда позволит вам выбрать нужную версию Java, если у вас установлено несколько версий. Просто следуйте инструкциям на экране.
На Mac/Linux используйте следующую команду:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Это работает как для JDK 9, так и для JDK 10, без необходимости править какие-либо скрипты (sdkmanager, avdmanager).
Для Java 11 смотрите: https://stackoverflow.com/a/51644855/798165
Вы можете добавить следующее в ваш профиль (работает на MacOS):
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Нет необходимости что-либо изменять или патчить.
Судя по предоставленной информации, проблема заключается в несовместимости Java 9 с Android SDK. Ошибка NoClassDefFoundError
указывает на то, что класс javax.xml.bind.annotation.XmlSchema
не найден, что является известной проблемой при использовании Java 9 и выше, так как в этих версиях Java API JAXB был удален из JDK.
Вам стоит рассмотреть возможность использования Java 8, поскольку именно эта версия лучшим образом совместима с Android SDK. Вот шаги, которые вы можете предпринять для решения проблемы:
Удалите Java 9 (или более позднюю версию), если она у вас установлена:
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
Установите Java 8 с помощью Homebrew:
brew tap caskroom/versions brew cask install java8
Проверьте, что Java 8 установлена правильно:
/usr/libexec/java_home -V
Настройте Android SDK (если это ещё не сделано), добавив нужные пути:
echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> ~/.bash_profile touch ~/.android/repositories.cfg brew cask install android-sdk
Проверьте версию Java ещё раз:
java -version
Теперь вы должны быть в состоянии запустить
avdmanager
без ошибок:avdmanager
Если вы столкнётесь с другими ошибками или вопросами, не стесняйтесь задавать их!
Инициализация ArrayList в одну строчку
Ошибка «Необходимо переопределить метод суперкласса» после импорта проекта в Eclipse
Использование контекста в фрагменте
Как заставить Android-устройство вибрировать с разной частотой?
Room - Директория экспорта схемы не указана аннотационному процессору, не удается экспортировать схему