web-dev-qa-db-ja.com

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)
87
Novellizator

私は今朝(Unity3Dを使ってAndroid用に構築しようとしている)同様の問題を抱えていた。 JDK9をアンインストールして Java SE Development Kit 8u144 をインストールしました。お役に立てれば。

  1. brew cask uninstall Java#uninstall Java9
  2. brew tap caskroom/versions
  3. brew cask install Java8#install Java8
  4. このファイルがないとtouch ~/.Android/repositories.cfg#、次のステップでエラーが発生します
  5. brew cask install Android-sdk
92
spassvogel
set Java_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee

これは私にとってはWindows上の問題を修正しました。

ソース1ソース2

50
Tim Jenßen

このエラーを解決するには、Javaのバージョンを下げることができます。

またはあなたの端末で以下のオプションをエクスポートします。

Linux/MAC:

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上に永久的に環境として追加することができます。


ps。 これは、Java EEモジュールを持たないJava 11以降では機能しません。このオプションは良い考えです、あなたのJavaバージョンをダウングレードするかFlutter update を待ってください。

参照: JDK 11:Java EEモジュールの道の終わり /

44
coderade

Mac/Linuxでは、以下を使用してください。
export Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'

JDK 9と10の両方で動作します。スクリプトのパッチなし(sdkmanager、avdmanager)

14
oori

私はcreate-react-appに必要なJDK 10(または9)をアンインストールする必要なしに、私のために働く2つの答えを見つけました。 JDK 9と10はどちらもAndroid-sdkと互換性がありません。


Siu Ching Pong -Asuka Kenji- /この行を置き換えて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を更新すると、このmodは上書きされます。
彼の投稿と彼がリンクしている投稿をチェックしてください。
この解決策は、この github issues thread に記載されている解決策の1つでもありました。


ドイツ語の投稿 は競合の原因を示し、更新によって上書きされない修正を提示します。
彼はあなたのシステムにあるJavaの最新版を探すスクリプトからそれを隠す手段として/Library/Java/JavaVirtualMachines/Info.plistの名前を変更することを勧めます。このようにして、JDK 8がデフォルトとして返されます。
JDK 10を明示的に参照するか、または$Java_HOMEに設定することによって、必要に応じてデフォルトの代わりにJDK 10を使用できます。
詳細は彼の投稿にあります。

12
SherylHohman

あなたはあなたのプロファイルに以下を追加する必要があります(MacOS上で動作):

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

何も修正する必要はありません。

7
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

参照しやすいように、すべてのコマンドを1つにまとめました。

$ 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%で終わるようにします。

JAXBとJAFを含めるようにCLASSPATHを設定します。

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

それからsdkmanager.batが動作します。

5
Peter Quiring

あなたがあなたのJavaバージョンを変えたくないなら(私はしないでください)。シェルのバージョンを一時的に変更することができます。

ファーストラン

/usr/libexec/Java_home -V

それからインストールされていればメジャーバージョンを選び、そうでなければ最初にインストールしてください。

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

これでsdkmanagerを実行できます

4
Sarah A

JDKバージョン8をインストールし、それをデフォルトとして選択してください。

Sudo update-alternatives --config Java
3
Steven

Windowsマシンの場合はJDKが1.8.172以上の場合はアンインストールします。 JDK 1.8.172をインストール

私は、Java 10のWindows 10でも同じ問題に直面していました。Java10をアンインストールし、Java 8をインストールしました。

1
Jagan

Linuxユーザ(私はDebianディストリビューション、Kaliを使用しています)は、以下のとおりです。

まだjdk-8を持っていないのなら、Oracleのサイトで入手したいでしょう。

https://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html

私はjdk-8u191-linux-x64.tar.gzを手に入れました

ステップ1 - JavaのインストールMoveのように適切な場所に解凍します。

$ mv jdk-8u191-linux-x64.tar.gz /suitablelocation/
$ tar -xzvf /suitablelocation/jdk-8u191-linux-x64.tar.gz

あなたはjdk1.8.0_191のような解凍されたフォルダを得るべきですあなたはスペースを節約するために後でtarballを削除することができます

ステップ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-Installing-Java-on-Kali-Linux 、mozilla用のデフォルトのプラグインも設定されています。 Android用に開発しようとしているだけなので、プラグインは本当に必要ないと思います。
  2. @ spassvogelの回答と同様に、@ repositories.cfgファイルも〜/ .Androidディレクトリに配置する必要があります。これはツールのリポジトリリストを更新するために必要です。
  3. いくつかのものを動かすにはroot権限が必要かもしれません。須藤を賢く使う。
  4. Sdkmanagerの使用方法については、公式ガイドを参照してください: https://developer.Android.com/studio/command-line/sdkmanager
1
Victor Fortman

コマンドラインでJava -versionjavac -versionコマンドを実行して、それらが同じJDKから来ていることを確認します(例:バージョン1.8.0_181)。

そうでない場合は、PATH変数が単一のJDKだけを指すように変更する必要があります。方法がわからない場合は、Java 8(Windowsの場合は[プログラムの追加と削除]を除く)を除くすべての他のJavaインスタンスをアンインストールするだけです。今日に関しては、UnityもAndroidもJDK 8を使用することを推奨しています。

Java 8では、他のいくつかの答えに示すようにJava.se.eeモジュールをエクスポートする必要はありません。設定したJava_OPTSや他の 環境変数 を削除することもできます。

0

あなたのJavaバージョンをダウングレードしてください。

Javaのバージョンが8以下であることを確認してください。

私の場合は、Javaのバージョンを変更します。これで問題は解決しました。 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

1.8を使用するようにJavaを変更してください

$ export Java_HOME = '/ライブラリ/ Java/JavaVirtualMachines/jdk1.8.0_202.jdk /コンテンツ/ホーム'

それから同じコマンドで$/Users // Library/Android/sdk/tools/bin/sdkmanager "platform; Android-28" "build-tools; 28.0.3"と実行します。

0
Sandeep

Android stuio/jreが異なるバージョンのJavaを使用している場合、このエラーを受け取ります。解決するには、Android studio/jreをJava_HOMEに設定するだけです。独自のJavaをアンインストールします。

0
Licat Julius