5

Ошибка установки android-sdk: "java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema"

13

Описание проблемы:

При установке инструментов 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 ответ(ов)

0

Если вы используете Mac OS и не хотите изменять свою Java-версию (я, например, не хочу), вы можете временно изменить версию в своем терминале:

Сначала выполните команду:

/usr/libexec/java_home -V

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

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

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

0

Если вы используете Linux, простым вариантом является установка JDK версии 8, а затем выбор его в качестве используемой по умолчанию версии, выполнив следующую команду:

sudo update-alternatives --config java

Эта команда позволит вам выбрать нужную версию Java, если у вас установлено несколько версий. Просто следуйте инструкциям на экране.

0

На 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

0

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

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

Нет необходимости что-либо изменять или патчить.

0

Судя по предоставленной информации, проблема заключается в несовместимости Java 9 с Android SDK. Ошибка NoClassDefFoundError указывает на то, что класс javax.xml.bind.annotation.XmlSchema не найден, что является известной проблемой при использовании Java 9 и выше, так как в этих версиях Java API JAXB был удален из JDK.

Вам стоит рассмотреть возможность использования Java 8, поскольку именно эта версия лучшим образом совместима с Android SDK. Вот шаги, которые вы можете предпринять для решения проблемы:

  1. Удалите 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
    
  2. Установите Java 8 с помощью Homebrew:

    brew tap caskroom/versions
    brew cask install java8
    
  3. Проверьте, что Java 8 установлена правильно:

    /usr/libexec/java_home -V
    
  4. Настройте Android SDK (если это ещё не сделано), добавив нужные пути:

    echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> ~/.bash_profile
    touch ~/.android/repositories.cfg
    brew cask install android-sdk
    
  5. Проверьте версию Java ещё раз:

    java -version
    
  6. Теперь вы должны быть в состоянии запустить avdmanager без ошибок:

    avdmanager
    

Если вы столкнётесь с другими ошибками или вопросами, не стесняйтесь задавать их!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь