122

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

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

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

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

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

4

20 に答える 20

104

クラスパスに追加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=

于 2013-09-28T08:14:36.813 に答える
62

JUnit GitHub チームの Web サイト ( 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>
于 2013-12-20T13:47:06.860 に答える
17

私のために働く: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 に再読み込みさせないでください。一度だけ。

于 2014-04-09T22:29:35.560 に答える
5

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

于 2013-01-27T17:19:01.357 に答える
2

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

于 2013-01-27T17:42:21.960 に答える
1

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

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

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

于 2013-01-26T16:59:50.183 に答える
1

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

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

于 2013-09-12T14:19:20.190 に答える
1

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

于 2018-02-22T00:44:16.600 に答える
1

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

于 2016-03-10T09:19:04.977 に答える
0

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

于 2013-09-17T22:01:54.997 に答える