web-dev-qa-db-ja.com

java.lang.NoClassDefFoundError:org / hamcrest / SelfDescribing

junitEclipseテストを実行しているときに、このExceptionを取得しています:

Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

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

Junit.jarのさまざまなバージョンを試しました:4.44.8など。

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

103
user2013948

hamcrest-all-X.X.jarclasspathに追加します。

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

84
Jiacai Liu

JUnit GitHubチームのWebサイト( https://github.com/junit-team/junit/wiki/Download-and-Install )によると、JUnitを使用する場合はクラスパスにjunit.jarhamcrest-core.jarの両方が必要です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>
50
jkwuc89

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

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

私のために働く: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>

追伸:ファイルを保存し、IntelliJ Ideaにリロードさせないでください。一度だけ。

16
GUEST

Junit.jarには古いHamcrestクラスのコピーがあるため、junit-dep.jarが必要です。

4
Stefan Birkner

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

最初はこの問題も発生しますが、 official site を参照し、コマンドラインで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
3
Saint

ここで説明するように、hamcrest-core JARをクラスパスに追加する必要があります。 https://github.com/junit-team/junit4/wiki/Download-and-Install

2
ayush agrahari

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

2
Ryan Stewart

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

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

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

2
Michael Ogala

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

1
Devendra Sharma

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

例:C:/ ant/lib

1
estudiante

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

Dependenciesタブでplugin.xmlのエディターを確認し、インポートされたパッケージからorg.junitを削除し、org.junitをRequired Plug-insに追加します。

1
Robert F

問題は、JDKではなくJREを指すようにEclipseをセットアップした場合です。 JREのjunit4.jarフォルダーにはlib/extがありますが、hamcrest.jarにはありません:)したがって、Eclipseでインストール済みのJREを確認し、既存のJREを削除して、JDKを指す新しいJREを作成します。

1
ACV

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

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

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

1
Logan

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

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

私は同じ問題を抱えていました、解決策はビルドパス/プラグインにjar org.hamcrest.core_1xxを追加することです、それはEclipse/pluginsで見つけることができます。