Saat memasang alat Android SDK kesalahan berikut dipancarkan:
java.lang.NoClassDefFoundError: javax / xml / bind / annotation / XmlSchema
Mengapa ini terjadi dan bagaimana cara memperbaikinya?
Output debug:
$ 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)
/Library/Java/JavaVirtualMachines
openjdk-8-jdk
danopenjdk-11-jdk
. Adakah yang tahu untuk memasang apajavax/xml/bind/annotation/XmlSchema
, atau bagaimana menghindarijavax/xml/bind/annotation/XmlSchema
di NDK?Jawaban:
Saya memiliki masalah serupa pagi ini (mencoba membangun untuk Android menggunakan Unity3D). Saya akhirnya menghapus JDK9 dan menginstal Java SE Development Kit 8u144 . Semoga ini membantu.
brew cask uninstall java
# uninstall java9brew tap homebrew/cask-versions
brew cask install java8
# pasang java8touch ~/.android/repositories.cfg
# tanpa file ini, kesalahan akan terjadi pada langkah berikutnyabrew cask install android-sdk
sumber
brew cask install homebrew/cask-versions/java8
brew cask install homebrew/cask-versions/adoptopenjdk8
tampaknya berhasilUntuk mengatasi kesalahan ini, Anda bisa menurunkan versi Java Anda.
Atau ekspor opsi berikut di terminal Anda:
Linux / MAC:
Windows :
Dan untuk menyimpannya secara permanen Anda dapat mengekspor
JAVA_OPTS
dalam file profil Anda di linux (.zshrc
,.bashrc
dan lain-lain) atau menambahkan sebagai variabel lingkungan secara permanen di Windows.ps. Ini tidak berfungsi untuk Java 11+, yang tidak memiliki modul Java EE. Untuk opsi ini adalah ide yang bagus, turunkan versi Java Anda atau tunggu pembaruan Flutter .
Ref: JDK 11: Ujung jalan untuk modul Java EE
sumber
Ini memperbaiki masalah pada Windows untuk saya.
Sumber 1 , sumber 2
sumber
export
tidakset
) dan itu menyelesaikan masalah.export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
di Ubuntu 18.04Jika Anda tidak ingin mengubah versi Java Anda (saya tidak), Anda dapat mengubah versi sementara di shell Anda:
Lari pertama
Kemudian pilih versi utama jika Anda menginstalnya, jika tidak instal dulu:
Sekarang Anda dapat menjalankan sdkmanager.
sumber
$ /usr/libexec/java_home -V
memberibash: /usr/libexec/java_home: No such file or directory
.apt-file search /usr/libexec/java_home
memberi apa-apa.echo "export JAVA_HOME=`/usr/libexec/java_home`" >> ~/.bashrc
(atau profil jika Anda menggunakan profil) - muat ulang:. ~/.bashrc
/usr/libexec
. Apakah Anda menggunakan MacOS? (Saya di Ubuntu / Linux dan Ubuntu / Windows)Di Mac / Linux gunakan perintah berikut:
Bekerja untuk JDK 9 dan 10, tanpa menambal skrip apa pun (sdkmanager, avdmanager).
Untuk Java 11 lihat: https://stackoverflow.com/a/51644855/798165
sumber
Saya menemukan dua jawaban yang berfungsi untuk saya, tanpa harus menghapus JDK 10 (atau 9), yang saya perlukan
create-react-app
. Baik JDK 9 dan 10 tidak kompatibel dengan android-SDK!Siu Ching Pong - Asuka Kenji- menyarankan untuk memodifikasi
sdkmanager
skrip, menggantikan baris ini:dengan:
Perhatikan bahwa mod ini akan ditimpa ketika memperbarui sdkmanager.
Lihat posnya, dan yang dia tautkan, untuk lebih jelasnya.
Solusi ini juga salah satu solusi yang disebutkan dalam utas masalah github ini .
Posting Jerman menunjukkan sumber konflik, dan menyajikan perbaikan yang tidak akan ditimpa oleh pembaruan.
Dia menyarankan penggantian nama
/Library/Java/JavaVirtualMachines/Info.plist
sebagai cara untuk mengaburkannya dari skrip yang mencari versi Java tertinggi yang ada di sistem Anda. Dengan cara ini, JDK 8 dikembalikan sebagai default.Mengacu pada JDK 10 secara eksplisit, atau dengan mengaturnya
$JAVA_HOME
, Anda dapat menggunakan JDK 10, sebagai ganti dari default, kapan pun diperlukan.Detail ada di posnya.
sumber
Could not find or load main class java.se.ee
- mengembalikan DEFAULT_JVM_OPTS memperbaiki ini dan masalah sebelumnya hilang ..Anda perlu menambahkan yang berikut ini ke Profil Anda (Bekerja pada MacOS):
Tidak perlu menambal apa pun.
sumber
Cukup instal JDK versi 8 dan pilih sebagai default menggunakan:
sumber
Pembaruan 2019-10:
Seperti yang dinyatakan dalam pelacak masalah , Google telah bekerja pada rilis Alat Perintah-SDK Android Android baru yang berjalan pada JVM saat ini (9, 10, 11+) dan tidak bergantung pada modul JAXB EE yang sudah usang!
Anda dapat mengunduh dan menggunakan Alat baris perintah SDK Android baru di dalam Android Studio atau dengan mengunduhnya secara manual dari server Google:
Untuk versi terbaru periksa URL di dalam repository.xml .
Jika Anda membongkar secara manual alat-alat baris perintah, berhati-hatilah menempatkannya dalam subfolder di dalam
$ANDROID_HOME
(mis$ANDROID_HOME/cmdline-tools/...
.) Anda.sumber
Anehnya Java9 tidak kompatibel dengan android-SDK
Menggabungkan semua perintah menjadi satu untuk referensi mudah:
sumber
Karena Java 11 telah menghapus JavaEE Anda harus mengunduh beberapa toples dan menambahkan ke classpath:
JAXB: https://javaee.github.io/jaxb-v2/
JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html
Kemudian edit sdkmanager.bat sehingga set CLASSPATH = ... diakhiri dengan ;% CLASSPATH%
Atur CLASSPATH untuk memasukkan JAXB dan JAF:
Kemudian sdkmanager.bat akan berfungsi.
sumber
Saya mengalami masalah yang sama saat menjalankan:
Saya memecahkannya sebagai
Ubah Java untuk menggunakan 1.8
Kemudian perintah yang sama berjalan dengan baik
sumber
Saya menghadapi masalah yang sama. Meskipun saya sedikit pengembang backdated (Masih menggunakan windows untuk mengembangkan: P)
Untuk mengatasi masalah ini di windows :
LANGKAH 1: Instal jdk 8 jika tidak diinstal (jdk 9 atau 11 tidak bekerja tetapi Anda mungkin menginstalnya untuk digunakan dalam penggunaan dev lainnya).
Sangat sederhana menggunakan Chocolatey:
(Jika dipasang menggunakan Chocolatey, lewati langkah 2 dan 3)
LANGKAH 2: Buka pengaturan variabel Lingkungan dan setel direktori instalasi JAVA_HOME KE jdk 8.
LANGKAH 3: Buka variabel path dan tambahkan direktori bin dari jdk 8 dan pindahkan ke atas.
LANGKAH 4: Tutup semua sesi terminal terbuka dan mulai kembali sesi baru
LANGKAH OPSIONAL 5: Bergantung pada tujuan Anda dalam menjalankan terminal (mungkin perlu menambahkan sdkmanager ke path atau hanya menavigasi ke direktori):
Itu saja! : O Selamat terbang! : D
sumber
Untuk mesin windows copot JDK jika lebih dari 1.8.172. Instal JDK 1.8.172
Saya menghadapi masalah yang sama di windows 10 dengan java 10. Saya uninstall java 10 dan menginstal java8 berfungsi dengan baik untuk saya sekarang :)
sumber
Untuk pengguna Linux (Saya menggunakan Debian Distro, Kali) Inilah cara saya menyelesaikan masalah saya.
Jika Anda belum memiliki jdk-8, Anda ingin mendapatkannya di situs oracle
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Saya mendapat jdk-8u191-linux-x64.tar.gz
Langkah 1 - Menginstal Java Move dan membongkar di lokasi yang cocok seperti itu
Anda harus mendapatkan folder yang tidak di-zip seperti jdk1.8.0_191 Anda dapat menghapus tarball setelahnya untuk menghemat ruang
Langkah 2 - Menyiapkan alternatif ke lokasi java default
Langkah 3 - Memilih alternatif Anda sebagai default
Langkah 4 - Mengkonfirmasi versi java default
Catatan
sumber
Jalankan
java -version
danjavac -version
perintah dalam baris perintah untuk memastikan bahwa mereka datang dari JDK yang sama (misalnya: versi 1.8.0_181)Jika tidak, Anda harus memodifikasi
PATH
variabel sehingga hanya menunjuk ke JDK tunggal. Jika Anda tidak yakin bagaimana caranya, cukup hapus instalan semua instance Java lainnya kecuali Java 8 (Tambah / Hapus Program di Windows). Sedangkan untuk hari ini, baik Unity dan Android merekomendasikan agar Anda menggunakan JDK 8.Dengan Java 8, tidak perlu mengekspor
java.se.ee
modul seperti yang ditunjukkan pada beberapa jawaban lain. Anda juga dapat menghapus variabel lingkungan apa punJAVA_OPTS
atau yang telah Anda tetapkan.sumber
Saya baru-baru ini menyelesaikan masalah ini dengan menghapus versi JDK yang lebih tinggi dan menginstal JDK 8. Setelah menginstal JDK Anda harus memberikan path. Maka Anda perlu membuka command prompt di "C: \ Users \ Milan Adhikari \ AppData \ Local \ Android \ Sdk \ tools" dan jalankan "sdkmanager --update" yang akan memperbarui sdk Anda dan kemudian Anda perlu menjalankan "flutter doctor - -android-lisensi "dalam cmd dan menerima semua lisensi.
Sekarang masalah Anda harus diselesaikan.
sumber
Dalam kasus saya, saya memerlukan JDK 8 (mencoba menggunakan AVD dan SDK manager di Qt di bawah Ubuntu) dan 11 untuk alat yang berbeda. Menghapus versi 11 bukan opsi.
Solusi 'JAVA_OPTS' tidak melakukan apa pun. Saya tidak terlalu suka JAVA_HOME ekspor, karena mungkin memaksa Anda melakukan peluncuran alat apa pun yang memanggil utilitas ini dari shell yang sama (seperti Qt), atau memaksa Anda untuk membuat ini permanen, yang tidak nyaman.
Jadi bagi saya solusinya cukup sederhana. Tambahkan sesuatu seperti ini di baris kedua ~ / Android / tools / bin / sdkmanager dan ~ / Android / tools / bin / avdmanager:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
(atau apa pun jalannya ke putaran 8 jdk Anda).
Dengan ini, alat-alat baris perintah ini bekerja dalam mode yang berdiri sendiri, mereka bekerja juga ketika dipanggil oleh alat-alat lain seperti Qt, dan jdk 11 masih merupakan sistem default untuk yang lain. Tidak perlu mencampur lib dll ...
Satu-satunya downside adalah bahwa setiap pembaruan ke alat-alat baris perintah ini akan menghapus modifikasi ini, yang harus Anda masukkan kembali.
sumber
Turunkan versi java Anda. Apapun sistem atau ide.
Pastikan versi java tidak lebih tinggi dari 8
Dalam kasus saya. Saya mengubah ide java verion. Ini menyelesaikan masalah saya.
sumber
Ketika Android stuio / jre Anda menggunakan versi java yang berbeda, Anda akan menerima kesalahan ini. untuk mengatasinya, cukup atur Android studio / jre ke JAVA_HOME Anda. dan uninstall java Anda sendiri.
sumber
Bagi saya saya menginstal java versi 8 dan cukup pilih versi java di "lokasi JDK":
sumber
Untuk keadaan saya, saya menggunakan SDKMAN untuk mengelola beberapa versi java. Saya menetapkan versi java default ke 13. Instal versi 8 dan sekarang berfungsi dengan baik.
sumber
Cara terbaik adalah dengan menggunakan perintah di bawah ini
Sekarang jalankan versi adb untuk memverifikasi itu telah diperbarui.
sumber