java.lang.NoClassDefFoundError:org / hamcrest / SelfDescribing


110

junitテストを実行している間、eclipse私はこれを取得していますException

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

junit.jarライブラリファイルを追加しました。

私はjunit.jarを、異なるバージョンを試してみた:4.44.8など

この例外を修正するにはどうすればよいですか?


あなたの説明によるとjunit.jar、問題とは関係ありません
Andremoniy

1
harcrest瓶、階層は同じですか?のようにorg > hamcrest > SelfDescribing、またはそれはjarのルートフォルダにありますか?
Danyel 2013年


1
このエラーはjunit jarではない可能性があります。プロジェクトの何かに他のjarが必要な場合があります。ここにorg.hamcrest.SelfDescribing-既知のバージョンがあります
jdurango

1
ありがとうございます。ただし、プロジェクトには他に何もありません。この新しいプロジェクトを作成しました。
user2013948 2013年

回答:


92

クラスパスに追加hamcrest-all-X.X.jarします。

2015年2月の最新バージョンは1.3です。http//code.google.com/p/hamcrest/downloads/detail?name = hamcrest- all- 1.3.jar&can = 2 &q =


2
クラスパスに追加したり、追加されているかどうかを確認するにはどうすればよいですか?
トマーシュZato -復活モニカ

そうする方法は参考になったでしょう。幸いにも以下のコメントにはそれがありました。
MarkII、2015年

最初に@TomášZato:ファイルを確認してください。それのhamcrest-すべて(それが取得することが重要ですすべてを)。Idea-IDEで依存関係が追加されます。1。ファイルをlibsフォルダー(または他の場所)にコピーして貼り付けます。2。「ライブラリーとして追加」ファイルを右クリックします。3。.javaファイルのインポート文を確認します。
Martin Pfeffer 2017

hamcrest-all-X.X.jarはるかに小さいながら十分です。
Elist

1
ファイル---プロジェクトの構造---ライブラリ--- '+' --- Java --- .... jar(ダウンロード済み)--- OK、「外部ライブラリ」に表示されます。
Simon Z.

56

JUnitのGitHubのチームのウェブサイト(によるhttps://github.com/junit-team/junit/wiki/Download-and-Install)、junit.jarおよびhamcrest-core.jarJUnitの4.11を使用している場合、両方のクラスパスに必要とされています。

junitとhamcrestを含めるためのMaven依存関係ブロックを次に示します。

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

Junit 5ではこれに直面していますが、それなしでも動作するはずです
Nikhil Sahu

22

あなたが従わなければならないいくつかのステップ:

  1. プロジェクトを右クリックします。
  2. [Build Path]を選択して、メニューから[Add Libraries]を選択します。
  3. JUnitを選択し、「次へ」をクリックします。
  4. JUnit4を選択し、次に終了します。

1
これで解決しました。java / Eclipseの使用に慣れていない人にとって、これは非常に役に立ちました。また、クラスのインストラクターが提供するラボには、私のラボ/ Eclipseのバージョンでは動作しないJunit(3多分)のバージョンがあったことにも触れておきたいと思います。私はそれを削除して4を追加する必要がありましたが、今はすべて順調です。どうもありがとう。
トニー・

コマンドプロンプトを使用してビルドを実行している場合、これは機能しません。これは「IDE」のみのソリューションです。
Partha

16

私のために働く:IntelliJ IDEA 13.1.1、JUnit4、Java 6

プロジェクトパスのファイルを変更しました:[PROJECT_NAME] .iml

交換済み:

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

したがって、最終的な.imlファイルは次のようになります。

<?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:ファイルを保存し、IntelliJ Ideaに再読み込みさせないでください。一度だけ。


超イケてる!!現在のプロジェクトで私を助けます。
MarkII、2015年


3

この問題は、クラスパスでhamcrest-core-1.3.jarが欠落していることが原因です。これを解決するには、クラスパスにjunit-4.XX.jarを追加するときにhamcrest-core-1.3.jarを追加します。

最初はこの問題にも遭遇しましたが、公式サイトを参照してコマンドラインでクラスパスにhamcrest-core-1.3.jarを追加すると、最終的には正常に動作します。

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

多くのライブラリにはhamcrestクラスが含まれているため、使用しているhamcrestのバージョンと競合する可能性があるため、原則として、hamcrestがクラスパス上の他のテストライブラリの前にあることを常に確認してください。これにより、説明しているタイプのほとんどの問題が解決されます。


2

ここにnetbeansを使用している人がいて、同じ問題がある場合に備えて、あなたがしなければならないのは

  • TestLibrariesを右クリック
  • [ライブラリを追加]をクリックします
  • JUnitを選択し、「ライブラリーの追加」をクリックします
  • プロセスを繰り返しますが、今度はHamcrestをクリックし、ライブラリを追加をクリックします。

これで問題が解決するはずです


ありがとう、これは私のために働きます。私はすでにJUnitライブラリを持っていましたが、ハムクレストがありませんでした。
S. Mayol 2017


1

それはクラスパスの問題のように聞こえるので、それに対処するにはいくつかの異なる方法があります。org / hamcret / SelfDescribingはどこから来たのですか?それはあなたのクラスですか、それとも別の瓶に入っていますか?

プロジェクトのビルドパスに移動して、[ライブラリ]タブでライブラリを追加します。プロジェクトにJUnitを選択できるはずです。これは、プロジェクトにJUnit jarファイルがあるだけの場合とは少し異なります。

JUnitテストの実行構成で、クラスパスを確認します。クラスパスがそのSelfDescribingクラスを認識できるように追加することで、おそらくこれを修正できます。Eclipseの「実行」オプションには、JUnitオプションとは異なるオプションのセットがあります。


ビルドパスにjunitライブラリファイルをすでに追加しているので、クラスパスの問題ではありません。junitライブラリでも、hamcrestへの参照があります。つまり、C:/devTools/eclipse-SDK-4.2.1-win32-x86_64/eclipse /plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
user2013948

回答ありがとうございます。testNGは正常に機能しています。junitで終了しなければならないようです
user2013948

ユニットテストとして何かを実行すると、JUnitが実際に新しいJVMを起動すると思いました。つまり、プロジェクトとは異なるクラスパスを使用することがあります。これらの種類のものをデバッグするために、コードからJavaクラスパスを出力して、実行時に違いを比較できるようにすることもあります。java-tips.org/java-se-tips/java.lang/...
ローガン

1

この問題がRCPプロジェクトで発生する場合は、JUnitが明示的にインポートされていることが原因である可能性があります。

エディターでplugin.xmlアンダーDependenciesタブを確認org.junitし、インポートされたパッケージからを削除しorg.junitて、必要なプラグインに追加します。


1

問題は、JDKではなくJREを指すようにEclipseを設定した場合です。JREはフォルダーにありますが、ではありません:)したがって、解決策は、EclipseにインストールされているJREを確認し、既存のJREを削除して、JDKを指す新しいJREを作成することです。junit4.jarlib/exthamcrest.jar


1

最初に問題を解決する最も簡単な方法は、最新バージョンのhamcrest-code.jarを、アプリケーションのコンパイルと実行に必要な他の.jarファイルを格納するファイルであるCLASSPATHにコピーすることです。

例:C:/ ant / lib


1

これは、コマンドラインからAntを実行すると発生します。暗黙的なユーザー依存関係は最後にクラスパスに追加され、プロジェクトが追加したクラスパスよりも優先されます。-nouserlibフラグ付きでAntを実行します。暗黙的な依存関係はクラスパスから除外されます。


1

この問題を解決するためのより良い答えがあります。依存関係を追加する

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


0

あなたが従わなければならないいくつかのステップ:

  • プロジェクトを右クリックします。
  • [ビルドパス]を選択し、メニューから[ライブラリを追加]を選択します。
  • JUnitを選択し、「次へ」をクリックします。
  • JUnit4を選択し、次に終了します。

これは私にとってはうまくいきます...

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