android-sdkのインストールに失敗しました:「java.lang.NoClassDefFoundError:javax / xml / bind / annotation / XmlSchema」


166

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)

あなたの質問は「このエラーの原因は何ですか?」答えは、javax.xmlクラスが見つからないということです。
Steve Smith

28
実際、この質問は、java9を使用している場合のAndroid SDKのインストールに関する正当な問題を示しています
jontro

17
私はこの問題を抱えており、エラーメッセージの最初の行をGoogleにコピーして貼り付けましたが、この質問が最初にヒットしました。それだけでなく、以下の答えの1つがそれを解決しました。これは完全にクローズされるべきではありません。質問のルールが何であれ、この質問はサイトの目的全体を明らかに満たしています。
Le Motは、2017年

1
からJava 8より古いものをすべて削除します/Library/Java/JavaVirtualMachines
Dimitris 2018年

2
この問題は、パッケージopenjdk-8-jdkを使用してUbuntu 18.04上のJava 8およびJava 11で発生しますopenjdk-11-jdk。誰が何をインストールするjavax/xml/bind/annotation/XmlSchemaか、またはjavax/xml/bind/annotation/XmlSchemaNDKで回避する方法を知っていますか?
jww

回答:


138

今朝も同様の問題がありました(Unity3Dを使用してAndroid用にビルドしようとしている)。結局、JDK9をアンインストールしてJava SE Development Kit 8u144をインストールしました。お役に立てれば。

  1. brew cask uninstall java #java9をアンインストール
  2. brew tap homebrew/cask-versions
  3. brew cask install java8 #java8をインストール
  4. touch ~/.android/repositories.cfg #このファイルがないと、次のステップでエラーが発生します
  5. brew cask install android-sdk

2
Windows 10でエラーが発生しましたが、これを試してもまだ機能しません。任意のヒント?
Vedvart1

3
すばらしい-これは、Android StudioでFlutterアプリを作成するのに役立ちました。ありがとう!
Darragh Enright

20
これは機能しなくなり、brew cask install java8が機能しません。
kdy

4
正しいコマンドは今のようですbrew cask install homebrew/cask-versions/java8
caesarsol

21
brew cask install homebrew/cask-versions/adoptopenjdk8動作するようです
グルツ

81

このエラーを解決するには、Javaバージョンをダウングレードできます。

または、ターミナルで次のオプションをエクスポートします。

Linux / MAC:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

set JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

そしてそれを永久に保存するにはJAVA_OPTS、Linux(.zshrc.bashrcなど)のプロファイルファイルにをエクスポートするか、Windowsの環境変数として永続的に追加します。


ps。これは、Java EEモジュールを持たないJava 11以降では機能しません。このオプションをお勧めします。Javaバージョンをダウングレードするか、Flutterの更新を待ちます。

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


6
これは、OpenJDK 10.0.2を含むUbuntu 18.04で私にとってはうまくいった
18

3
macOS Mojave(10.14.2)でJavaバージョン "10.0.1" 2018-04-17を使用して動作しました。
Subfuzion 2018

4
macOS Mojave(10.14.2)で新しいエラーが発生しました:ブートレイヤーの初期化中にエラーが発生しましたjava.lang.module.FindException:モジュールjava.se.eeが見つかりません
Randy

2
1.8.0_191も試してみましたが、まだエラーが発生します:エラー:メインクラスjava.se.eeが見つからないか、ロードできませんでした
Randy

1
このオプションはJava 8には必要なく、Java EEモジュールがないJava 11には機能しません。
バルデシ

63
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

これでWindowsの問題が解決しました。

ソース1ソース2


2
これをubuntu 16.04でも使用し(exportnot を使用set)、問題を解決しました。
ベンジャミンコンラン2018年

天才。本当にありがとう。私は自分のJVMを変更する必要があると思っていました
フレーク

1
Java 10を搭載したWindows 10で魅力的に動作しました
pabz

4
残念ながら、それはJava 11で完全に削除されたようです
Alastair Maw

export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'Ubuntu 18.04での作業
e2-e4

25

Javaのバージョンを変更したくない場合(私は変更しません)、シェルでバージョンを一時的に変更できます。

ファーストラン

/usr/libexec/java_home -V

次に、メジャーバージョンがインストールされている場合はそれを選択し、そうでない場合は最初にインストールします。

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

これで、sdkmanagerを実行できます。


2
$ /usr/libexec/java_home -V与えbash: /usr/libexec/java_home: No such file or directoryます。 apt-file search /usr/libexec/java_homeまったく何も与えません。
Tino、

$ JAVA_HOMEは正しく設定されていますか?実行:(echo "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrcまたは、プロファイルを使用する場合はプロファイル)-リロード:. ~/.bashrc
Sarah A

/usr/libexecどちらもありません。MacOSを使用していますか?(私はUbuntu / LinuxおよびUbuntu / Windowsを使用しています)
Tino

Macを使用しています。あなたのJava_homeはどこですか?
サラA

20

Mac / Linuxでは、次のコマンドを使用します。

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

、JDK 9及び10の両方のために働くことなく、任意のスクリプト(sdkmanager、avdmanager)をパッチ。

Java 11の場合:https : //stackoverflow.com/a/51644855/798165


1
ありがとう!jdk 9をインストールしたときに問題が解決します
Jorge Valvert

15

JDK 10(または9)をアンインストールしなくても、2つの答えが見つかりましたcreate-react-app。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'

このmodはsdkmanagerを更新すると上書きされることに注意してください。
詳細については、彼の投稿と彼がリンクしている投稿を確認してください。
このソリューションは、このgithubの問題のスレッドで言及されているソリューションの1つでもありました。


ドイツの投稿は衝突の原因を示し、更新によって上書きされない修正を提示します。
彼は/Library/Java/JavaVirtualMachines/Info.plist、システムに存在するJavaの最新バージョンを探すスクリプトからそれを隠す手段として、名前を変更することを提案しています。このようにして、JDK 8がデフォルトとして返されます。
JDK 10を明示的に参照するか、に設定することにより$JAVA_HOME、必要なときにいつでもデフォルトの代わりにJDK 10を使用できます。
詳細は彼の投稿にあります。


1
Javaをダウングレードすることを強制しないため、完璧に機能する最高のソリューション
IMHO

どういうわけか、aoをたくさん試した後。Androidのメーカーは、この問題は消え、新しいエラーがされたCould not find or load main class java.se.ee- DEFAULT_JVM_OPTSを元に戻すことは、これを固定し、以前の問題が去っていきました...
4levels

3
残念ながら、これは現在動作しません。結果は次のとおりです。ブートレイヤーjava.lang.module.FindExceptionの初期化中にエラーが発生しました:モジュールjava.se.eeが見つかりません
Oscar

1
ダウングレードせずにjdk-11とjdk1.8をインストールしたままにするための正しいソリューションを提供するためのstackoverflow.com/a/49630166/5411817への賛成投票
harrisjb

15

以下をプロファイルに追加する必要があります(MacOSで機能):

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

パッチを当てる必要はありません。


15

JDKバージョン8をインストールし、以下を使用してデフォルトとして選択します。

sudo update-alternatives --config java

10

アップデート2019-10:

問題追跡に記載されている、Googleが新に取り組んでいるのAndroid SDKコマンドラインツール、現在のJVM上で動作(9、10、11+)ことを解放し、非推奨JAXB EEモジュールに依存しません!

Android Studio内で、またはGoogleサーバーから手動でダウンロードすることで、新しいAndroid SDKコマンドラインツールをダウンロードして使用できます。

最新バージョンについては、repository.xml内のURLを確認してください。

コマンドラインツールを手動でアンパックする場合は、ツール$ANDROID_HOME(など$ANDROID_HOME/cmdline-tools/...)内のサブフォルダーに配置してください。


Java 9+を使用する場合、これが今からの答えになるはずです!
Luiggi Mendoza

9

奇妙なことに、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.

8

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を含めます。

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

その後、sdkmanager.batが機能します。


動作しますが、次の警告が表示されます。警告:com.sun.xml.bind.v2.runtime.reflect.opt.Injector(file:/ F:/ android_sdk / java / jaxb-ri / lib / jaxbによる不正なリフレクトアクセス-impl.jar)からメソッドjava.lang.ClassLoader.defineClass(java.lang.String、byte []、int、int)
AndyMc

ええ、JavaはJAXBが使用するクラスセキュリティを回避するためにリフレクションを使用する
不適切

4

実行中に同じ問題が発生しました:

$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"_

私はそれを解決しました

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home    

$ ls /Library/Java/JavaVirtualMachines/

jdk-11.0.1.jdk      
jdk1.8.0_202.jdk

1.8を使用するようにJavaを変更する

$ export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home'

その後、同じコマンドが正常に実行されます

$ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"

これが最良のケースです。すでにJAVA_OPTSをエクスポートしている場合。この回答の手順を実行する前に、まずそれを削除してください。
ソード・ジェイソン、

4

私も同じ問題に直面しました。私は少し時代遅れの開発者ですが(まだWindowsを使って開発しています:P)

Windowsでこの問題を解決するには:

ステップ1:jdk 8がインストールされていない場合はインストールします(jdk 9または11は機能しませんが、他の開発用途で使用するためにインストールされている場合があります)。

Chocolateyを使用して非常に簡単:

チョコインストールjdk8

(Chocolateyを使用してインストールした場合は、ステップ2と3をスキップします)

ステップ2:環境変数の設定に移動し、JAVA_HOME TO jdk 8のインストールディレクトリを設定します。

JAVA_HOME

ステップ3:パス変数に移動し、jdk 8のbinディレクトリを追加して、上に移動します。

Path_varriable

手順4:開いているターミナルセッションをすべて閉じて、新しいセッションを再開する

オプションのステップ5:端末実行の目的に応じて(パスにsdkmanagerを追加するか、単にディレクトリに移動する必要がある場合があります):

sdkmanager --update

それで全部です!:O羽ばたきをお楽しみください!:D


1
これとトップアンサーがWindows 10でうまくいきました!
mauriii

THANKSSSSSSSSSSSSSS
Raghav Joshi

2

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

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


2

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をインストールし、適切な場所に解凍します

$ 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の回答と同様に、@ /。androidディレクトリに@ repositories.cfgファイルも配置する必要があります。これは、ツールリポジトリリストを更新するために必要です。
  3. いくつかのものを移動するには、root権限が必要になる場合があります。sudoは賢く使用してください。
  4. sdkmanagerの使用方法については、公式ガイドを参照してください:https ://developer.android.com/studio/command-line/sdkmanager

1

ファイル名を指定して実行java -versionし、javac -versionそれらが同じJDK(例:バージョン1.8.0_181)から来ていることを確認するためのコマンドラインのコマンド

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

Java 8ではjava.se.ee、他のいくつかの回答に示されているように、モジュールをエクスポートする必要はありません。あなたはまた、任意の削除することJAVA_OPTS、または他の環境変数を設定したことを。


1

私は最近、より高いバージョンのJDKをアンインストールしてJDK 8をインストールすることにより、この問題を解決しました。JDKをインストールした後、パスを指定する必要があります。次に、「C:\ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools」でコマンドプロンプトを開き、「sdkmanager --update」を実行してsdkを更新し、「flutter doctor- -android-licenses」をコマンドで入力し、すべてのライセンスを受け入れます。
これで問題は解決されました。


1

私の場合、JDK 8(ubuntuでQtのAVDおよびSDKマネージャーを使用しようとしている)と11の異なるツールが必要です。バージョン11を削除することはできません。

「JAVA_OPTS」ソリューションは何もしませんでした。同じシェル(Qtなど)からこれらのユーティリティを呼び出すツールを強制的に起動したり、これを永続的にするよう強制したりする可能性があるため、私はエクスポートJAVA_HOMEが本当に好きではありません。

だから私にとっては解決策は非常に簡単です。〜/ Android / tools / bin / sdkmanagerと〜/ Android / tools / bin / avdmanagerの2行目に次のように追加します。

JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"

(または、パスがrev 8 jdkへのパスであれば何でも)。

これにより、これらのコマンドラインツールはスタンドアロンモードで動作し、Qtなどの他のツールから呼び出されたときにも動作し、jdk 11は他のシステムのデフォルトのままです。ライブラリなどを混ぜる必要はありません...

唯一の欠点は、これらのコマンドラインツールを更新すると、これらの変更が消去されるため、元に戻す必要があることです。


上!ありがとうございました!
Funder

0

Javaのバージョンをダウングレードします。システムやIDEは問いません。

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

私の場合、ide java verionを変更します。これで私の問題は解決します。 ここに画像の説明を入力してください


0

Android stuio / jreが異なるバージョンのJavaを使用している場合、このエラーが発生します。それを解決するには、Android studio / jreをJAVA_HOMEに設定します。自分のJavaをアンインストールします。



0

私の状況では、sdkmanを使用して複数のJavaバージョンを管理しています。デフォルトのJavaバージョンを13に設定しました。バージョン8をインストールすると、問題なく動作します。


0

最善の方法は、以下のコマンドを使用することです

   $ wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
   $ unzip \platform-tools-latest-linux.zip
   $ sudo cp platform-tools/adb /usr/bin/adb
   $ sudo cp platform-tools/fastboot /usr/bin/fastboot

次に、adb versionを実行して、更新されていることを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.