java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing


110

junitTest çalıştırırken şunu eclipsealıyorum Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

junit.jarKitaplık dosyası ekledim .

Ben junit.jar farklı sürümlerini denedim: 4.4, 4.8vb

Bu İstisnayı nasıl düzeltirim?


Açıklamanıza göre junit.jar, sorunla ilgili değil
Andremoniy

1
In harcrestkavanoz, hiyerarşi aynıdır? gibi org > hamcrest > SelfDescribingmi yoksa kavanozun kök klasöründe mi?
Danyel


1
bu hata junit jar için olmayabilir, belki projenizdeki bir şeyin başka jar'e
jdurango

1
Teşekkürler ama projede başka bir şeyim yok, bu yeni projeyi yarattım.
user2013948

Yanıtlar:


92

Ekle hamcrest-all-X.X.jarsizin için sınıf yolunda .

Şubat 2015 itibarıyla en son sürüm 1.3'tür: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=


2
Bunu sınıf yoluna nasıl ekleyebilirim veya eklenip eklenmediğini nasıl kontrol edebilirim?
Tomáš Zato - Monica'yı eski durumuna getir

Kabul edildi, bunun nasıl yapılacağı yardımcı olabilirdi. Neyse ki aşağıda yorum vardı.
Mark II

@ Önce TomášZato: dosyayı kontrol edin. 's hamcrest-all (bunu elde etmek için önemlidir Tümü ). Idea-IDE'lerde bir bağımlılık eklenir 1. dosyayı libs klasörüne kopyalayın / yapıştırın (veya başka bir yere) 2. "kitaplık olarak ekle" dosyasını sağ tıklayın 3. .java dosyalarınızdaki içe aktarma ifadelerinizi kontrol edin.
Martin Pfeffer

hamcrest-all-X.X.jarçok daha küçükken yeterlidir.
Elist

1
Dosya --- Proje Yapısı --- Kitaplıklar --- '+' --- Java --- .... jar (indirdiğiniz) --- Tamam, 'harici kitaplıkta' gösterilecek.
Simon Z.16

56

JUnit GitHub ekip web sitesine göre ( https://github.com/junit-team/junit/wiki/Download-and-Install ) junit.jarve hamcrest-core.jarJUnit 4.11 kullanılırken her ikisi de sınıf yolunda gereklidir.

Junit ve hamcrest'i dahil etmek için Maven bağımlılık bloğu burada.

<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>

5 Haziranda bununla karşılaşıyorum ama onsuz çalışması gerekiyor
Nikhil Sahu

22

İzlemeniz gereken birkaç adım:

  1. Projeye sağ tıklayın.
  2. Yol Oluştur'u seçin Sonra menüsünden Kitaplık Ekle'yi seçin.
  3. JUnit'i seçin ve İleri'ye tıklayın.
  4. JUnit4'ü ve ardından Finish'i seçin.

1
Bu benim için düzeltti. Java / Eclipse kullanmaya alışkın olmayan biri için bu son derece yardımcı oldu. Ayrıca eğitmenim tarafından sınıf için sağlanan laboratuvarların, Eclipse'in Lab / sürümümle çalışmayan bir Junit sürümüne (3 belki) sahip olduğunu da belirtmek istedim. Kaldırmam ve 4 eklemem gerekiyordu ve şimdi her şey yolunda. Çok teşekkürler.
Tony

Yapıyı komut istemini kullanarak çalıştırdığınızda bu çalışmaz. Bu yalnızca bir "IDE" çözümüdür.
Partha

16

Benim için çalışıyor: IntelliJ IDEA 13.1.1, JUnit4, Java 6

Proje yolundaki dosyayı değiştirdim: [PROJECT_NAME] .iml

Değiştirilen:

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

Tarafından:

  <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>

Dolayısıyla, son .iml dosyası:

<?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>

Not: dosyayı kaydedin ve IntelliJ Idea'nın yeniden yüklemesine izin vermeyin. Sadece bir kere.


Süper harika!! Mevcut projemde bana yardımcı oluyor.
MarkII

4

Junit-dep.jar'a ihtiyacınız var çünkü junit.jar eski Hamcrest sınıflarının bir kopyasına sahip.


3

Bu sorun, sınıf yolunuzun hamcrest-core-1.3.jar dosyasını kaçırmasından kaynaklanıyor. Bunu çözmek için sınıf yolunuza junit-4.XX.jar'ı eklerken hamcrest-core-1.3.jar dosyasını ekleyin.

İlk başta ben de bu sorunla karşılaşıyorum ama resmi siteye başvurup hamcrest-core-1.3.jar'ı komut satırı ile classpath'e ekledikten sonra nihayet düzgün çalışıyor.

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

2

Genel bir kural olarak, bu tür kitaplıkların çoğu hamcrest sınıflarını içerdiğinden ve bu nedenle kullandığınız hamcrest sürümüyle çakışabileceğinden, hamcrest'in sınıf yolundaki diğer test kitaplıklarından önce olduğundan her zaman emin olun. Bu, tanımladığınız türdeki çoğu sorunu çözecektir.


2

Burada net fasulyesi kullanan biri varsa ve aynı sorunu yaşıyorsa, yapmanız gereken tek şey

  • TestLibraries'e sağ tıklayın
  • Kitaplık Ekle'ye tıklayın
  • JUnit'i seçin ve kitaplık ekle'ye tıklayın
  • İşlemi tekrarlayın, ancak bu sefer Hamcrest'e tıklayın ve kitaplık ekle'ye tıklayın.

Bu sorunu çözmeli


Teşekkür ederim, bu benim için çalışıyor. Zaten JUnit kitaplığım vardı ama Hamcrest'i kaçırıyordum.
S.Mayol


1

Bu bir sınıf yolu sorunu gibi görünüyor, bu yüzden bununla ilgili birkaç farklı yol var. Org / hamcret / SelfDescribing nereden geliyor? Bu senin sınıfın mı yoksa farklı bir kavanozda mı?

Projenizin Derleme Yolu'na gitmeyi deneyin ve Kitaplıklar sekmesinde bir Kitaplık ekleyin. Projenize JUnit'i seçebilmelisiniz. Bu, projenizde JUnit jar dosyasına sahip olmaktan biraz farklıdır.

JUnit testi için Çalıştırma Yapılandırmanızda, Sınıfyolunu kontrol edin. Muhtemelen bunu, Classpath'inizin SelfDescribing sınıfını orada görebildiğinden emin olarak ekleyerek düzeltebilirsiniz. Eclipse'deki Çalıştır seçeneği, JUnit seçenekleri için farklı seçeneklere sahiptir.


Bu bir sınıf yolu sorunu değil çünkü derleme yoluna junit kitaplık dosyasını ekledim, hatta junit kitaplığında bile hamcrest'e bir başvuru var yani C: /devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
user2013948

cevabınız için teşekkürler, testNG iyi çalışıyor, görünüşe göre
junit'te

Bir birim testi olarak bir şey çalıştırdığınızda JUnit'in aslında yeni bir JVM başlattığını düşünüyordum. Bu, bazen projenizden farklı bir sınıf yolu kullandığı anlamına gelir. Bazen bu tür şeylerde hata ayıklamak için java sınıf yolunu kodumdan yazdırırım, böylece çalıştırıldığında farklılıkları karşılaştırabilirim. java-tips.org/java-se-tips/java.lang/…
Logan

1

Bu sorun bir RCP projesinde ortaya çıkarsa, bunun nedeni JUnit'in açıkça içe aktarılmış olması olabilir.

plugin.xmlAlt Dependenciessekmeniz için düzenleyiciyi kontrol edin, org.junitİçe Aktarılan Paketleri kaldırın org.junitve Gerekli Eklentilere ekleyin .


1

Sorun, tutulmayı JDK yerine JRE'yi gösterecek şekilde kurduğunuz zamandır . JRE vardır junit4.jariçinde lib/extklasörde değil hamcrest.jarçözüm, Eclipse yüklü JREs kontrol varolan birini kaldırmak ve yeni bir tek işaret yaratmaktır :) Yani JDK .


1

Sorunu çözmenin en basit yolu, hamcrest-code.jar'ın en son sürümünü, uygulamanızın derlenmesi ve çalıştırılması için gereken diğer .jar dosyalarını sakladığınız CLASSPATH dosyanıza kopyalamaktır.

bu örneğin olabilir: C: / ant / lib


1

Bu, Ant'ı komut satırı aracılığıyla çalıştırdığınızda olur. Örtük kullanıcı bağımlılıkları, sınıf yolunun sonuna eklenir ve proje tarafından eklenen sınıf yoluna göre önceliklidir. Ant'ı -nouserlibbayrakla çalıştırın . Örtük bağımlılıklar sınıf yolundan çıkarılır.


1

Bu sorunu çözmek için daha iyi bir cevap var. bağımlılık ekle

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

0

Ben de aynı sorunu yaşadım, çözüm derleme yolunu / eklentisini jar org.hamcrest.core_1xx'e eklemek, onu eclipse / plugins'de bulabilirsiniz.


0

İzlemeniz gereken birkaç adım:

  • Projeye sağ tıklayın.
  • Yol Oluştur'u seçin ve ardından kendi menüsünden Kitaplık Ekle'yi seçin.
  • JUnit'i seçin ve İleri'ye tıklayın.
  • JUnit4'ü ve ardından Finish'i seçin.

Bu benim için çalışıyor ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.