java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing

110

Saat menjalankan junittes di eclipsesaya mendapatkan ini Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

Saya telah menambahkan junit.jarfile perpustakaan.

Saya sudah mencoba berbagai versi junit.jar: 4.4, 4.8, dll

Bagaimana cara memperbaiki Pengecualian ini?

pengguna2013948
sumber
Menurut deskripsi Anda, junit.jartidak terkait dengan masalah
Andremoniy
1
Di dalam harcresttoples, apakah hierarkinya sama? seperti di org > hamcrest > SelfDescribing, atau di folder root dari jar?
Danyel
1
kesalahan ini mungkin bukan untuk jar junit, mungkin sesuatu dalam proyek Anda membutuhkan tabung lain, di sini ada beberapa org.hamcrest.SelfDescribing - versi yang diketahui
jdurango
1
Terima kasih, tetapi saya tidak memiliki apa pun dalam proyek ini, saya telah membuat proyek baru ini.
pengguna2013948

Jawaban:

92

Tambahkan hamcrest-all-X.X.jarke jalur kelas Anda .

Versi terbaru per Feb 2015 adalah 1.3: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=

Jiacai Liu
sumber
2
Bagaimana cara menambahkannya ke classpath atau memeriksa apakah sudah ditambahkan atau tidak?
Tomáš Zato - Kembalikan Monica
Setuju, bagaimana melakukan itu akan sangat membantu. Untungnya komentar di bawah ini.
MarkII
@ TomášZato pertama: periksa file. itu hamcrest-all (penting untuk mendapatkan semuanya ). Dalam Idea-IDEs, ketergantungan ditambahkan 1. salin / tempel file ke folder libs (atau di mana pun) 2. klik kanan file "tambahkan sebagai perpustakaan" 3. periksa pernyataan impor Anda di file .java Anda.
Martin Pfeffer
hamcrest-all-X.X.jarsudah cukup sementara jauh lebih kecil.
Elist
1
File --- Struktur Proyek --- Perpustakaan --- '+' --- Java --- .... jar (Anda telah mengunduh) --- OK, itu akan ditampilkan di 'perpustakaan eksternal'.
Simon Z.
56

Menurut situs web tim JUnit GitHub ( https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jardan hamcrest-core.jarkeduanya diperlukan di jalur kelas saat menggunakan JUnit 4.11.

Berikut adalah blok ketergantungan Maven untuk menyertakan junit dan hamcrest.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.1.2</version>
    <scope>test</scope>
</dependency>
<!-- Needed by junit -->
<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>
jkwuc89.dll
sumber
Saya menghadapi ini di 5 Juni meskipun seharusnya berfungsi tanpanya
Nikhil Sahu
22

Beberapa langkah yang harus Anda ikuti:

  1. Klik kanan pada proyek tersebut.
  2. Pilih Build Path Kemudian dari menunya pilih Add Libraries.
  3. Pilih JUnit lalu klik Next.
  4. Pilih JUnit4 lalu Selesai.
Muhammed Refaat
sumber
1
Ini memperbaikinya untuk saya. Untuk seseorang yang tidak terbiasa menggunakan java / Eclipse, ini sangat membantu. Saya juga ingin menyebutkan bahwa lab yang disediakan oleh Instruktur saya untuk kelas memiliki versi Junit (3 mungkin) yang tidak berfungsi dengan Lab / versi Eclipse saya. Saya harus menghapusnya dan menambahkan 4 dan semuanya baik-baik saja sekarang. Terima kasih banyak.
Tony
Ini tidak berfungsi saat Anda menjalankan build menggunakan command prompt. Ini adalah solusi satu-satunya "IDE".
Partha
16

Cocok untuk saya: IntelliJ IDEA 13.1.1, JUnit4, Java 6

Saya mengubah file di jalur proyek: [PROJECT_NAME] .iml

Diganti:

  <library>
    <CLASSES>
      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

Oleh:

  <library name="JUnit4">
    <CLASSES>
      <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
      <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
      <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

Jadi file .iml terakhir adalah:

<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="module-library">
      <library name="JUnit4">
        <CLASSES>
          <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-library-1.3.jar!/" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
  </component>
</module>

PS: simpan file dan jangan biarkan IntelliJ Idea memuat ulang. Hanya sekali.

TAMU
sumber
Sangat luar biasa !! Membantu saya dengan proyek saya saat ini.
MarkII
4

Anda memerlukan junit-dep.jar karena junit.jar memiliki salinan kelas Hamcrest lama.

Stefan Birkner
sumber
3

Masalah ini karena classpath Anda miss hamcrest-core-1.3.jar. Untuk mengatasi ini tambahkan hamcrest-core-1.3.jar saat Anda menambahkan junit-4.XX.jar ke classpath Anda.

Pada awalnya, saya mengalami masalah ini juga, tetapi setelah saya merujuk ke situs resmi dan menambahkan hamcrest-core-1.3.jar ke classpath dengan baris perintah, akhirnya berfungsi dengan baik.

javac -d ../../../../bin/ -cp ~/libs/junit-4.12.jar:/home/limxtop/projects/algorithms/bin  MaxHeapTest.java 

java -cp ../../../../bin/:/home/limxtop/libs/junit-4.12.jar:/home/limxtop/libs/hamcrest-core-1.3.jar org.junit.runner.JUnitCore com.limxtop.heap.MaxHeapTest
Santo
sumber
2

Sebagai aturan umum, selalu pastikan hamcrest berada sebelum pustaka pengujian lainnya di classpath, karena banyak pustaka seperti itu menyertakan kelas hamcrest dan oleh karena itu dapat bertentangan dengan versi hamcrest yang Anda gunakan. Ini akan menyelesaikan sebagian besar masalah dari jenis yang Anda gambarkan.

Ryan Stewart
sumber
2

Kalau-kalau ada orang di sini yang menggunakan netbeans dan memiliki masalah yang sama, yang harus Anda lakukan hanyalah

  • Klik kanan pada TestLibraries
  • Klik Add Library
  • Pilih JUnit dan klik tambahkan perpustakaan
  • Ulangi prosesnya tetapi kali ini klik Hamcrest dan klik tambahkan perpustakaan

Ini seharusnya menyelesaikan masalah

Michael Ogala
sumber
Terima kasih, ini berhasil untuk saya. Saya sudah memiliki perpustakaan JUnit tetapi saya kehilangan Hamcrest.
S. Mayol
1

Kedengarannya seperti masalah jalur kelas, jadi ada beberapa cara berbeda untuk mengatasinya. Dari mana asal org / hamcret / SelfDescribing? Apakah itu kelas Anda atau di toples yang berbeda?

Coba masuk ke proyek Anda Build Path dan pada tab Libraries, tambahkan Library. Anda harus dapat memilih JUnit untuk proyek Anda. Ini sedikit berbeda dari hanya memiliki file jar JUnit di proyek Anda.

Di Run Configuration untuk pengujian JUnit, periksa Classpath. Anda mungkin dapat memperbaikinya dengan menambahkan memastikan bahwa Classpath Anda dapat melihat kelas SelfDescribing di sana. Opsi Jalankan di Eclipse memiliki serangkaian opsi berbeda untuk opsi JUnit.

Logan
sumber
ini bukan masalah classpath karena saya telah menambahkan file library junit di jalur build, bahkan di library junit ada referensi ke hamcrest yaitu C: /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
user2013948
terima kasih atas tanggapan Anda, testNG berfungsi dengan baik, sepertinya saya harus berhenti pada junit
pengguna2013948
Saya baru saja berpikir bahwa JUnit sebenarnya memulai JVM baru ketika Anda menjalankan sesuatu sebagai pengujian unit. Artinya, terkadang project ini menggunakan classpath yang berbeda dari project Anda. Kadang-kadang untuk men-debug jenis hal ini saya mencetak java classpath dari kode saya, jadi saya dapat membandingkan perbedaannya ketika dijalankan. java-tips.org/java-se-tips/java.lang/…
Logan
1

Jika masalah ini muncul dalam proyek RCP, itu mungkin karena JUnit telah diimpor secara eksplisit.

Periksa editor untuk tab Anda di plugin.xmlbawah Dependencies, hapus org.junitdari Paket yang Diimpor dan tambahkan org.junitke Plug-in yang Diperlukan.

Robert F
sumber
1

Masalahnya adalah saat Anda menyiapkan gerhana untuk mengarah ke JRE, bukan JDK . JRE ada junit4.jardi lib/extfoldernya, tapi tidak hamcrest.jar:) Jadi solusinya adalah memeriksa JRE yang terinstal di Eclipse, hapus yang sudah ada dan buat yang baru menunjuk ke JDK Anda .

ACV
sumber
1

cara termudah untuk memecahkan masalah untuk memulai adalah menyalin versi terbaru dari hamcrest-code.jar ke dalam CLASSPATH Anda yang merupakan file yang Anda simpan file .jar lain yang diperlukan untuk kompilasi dan menjalankan aplikasi Anda.

itu bisa jadi misalnya: C: / ant / lib

estudiante
sumber
1

Ini terjadi ketika Anda menjalankan Ant melalui baris perintah. Dependensi pengguna implisit ditambahkan di classpath di bagian akhir dan lebih diutamakan daripada classpath yang ditambahkan proyek. Jalankan Ant dengan -nouserlibbendera. Dependensi implisit akan dikecualikan dari classpath.

Devendra Sharma
sumber
1

Ada jawaban yang lebih baik untuk mengatasi masalah ini. tambahkan ketergantungan

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>
小 messi
sumber
0

Saya memiliki masalah yang sama, solusinya adalah menambahkan build path / plugin ke jar org.hamcrest.core_1xx, Anda dapat menemukannya di eclipse / plugins.

Mohamed Iyeb Abed Rabou
sumber
0

Beberapa langkah yang harus Anda ikuti:

  • Klik kanan pada proyek tersebut.
  • Pilih Build Path & kemudian dari menunya pilih Add Libraries.
  • Pilih JUnit lalu klik Next.
  • Pilih JUnit4 lalu Selesai.

Ini bekerja untuk saya ...

Karthikraja Loganathan
sumber