Не удалось установить Android-sdk: "java.ленг.Ошибке типа noclassdeffounderror: класса javax/в XML/персонализация/аннотация/как xmlschema"
при установке Android sdk tools выдается следующая ошибка:
java.ленг.Ошибке типа noclassdeffounderror: класса javax/в XML/персонализация/аннотация/как 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)
9 ответов
у меня была аналогичная проблема сегодня утром (попытка построить для 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
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee
это исправило проблему в Windows для меня.
Я нашел два ответа, которые работали для меня, без необходимости удаления 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 вместо значения по умолчанию, когда это необходимо.
Подробности в его сообщении.
странно 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.
на Mac/Linux используйте:export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
работает как для JDK 9, так и для 10,без исправление любого скрипта (sdkmanager, avdmanager)
чтобы решить эту ошибку, вы можете понизить версию Java.
или экспортирует следующую опцию на вашем терминале:
Linux:
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.
для машины windows удалите JDK, если его больше, чем 1.8.172. Установить JDK 1.8.172
Я столкнулся с той же проблемой в windows 10 С java 10. Я удалил java 10 и установил java8, теперь он отлично работает для меня:)
Run 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
и переменные среды что вы установили.
Если вы не хотите изменять свою версию Java (я не хочу). Вы можете временно изменить версию в своей оболочке:
первый запуск
/usr/libexec/java_home -V
затем выберите основную версию, если она установлена, в противном случае сначала установите ее:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8
теперь вы можете запустить sdkmanager