junit
でEclipse
テストを実行しているときに、このException
を取得しています:
Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
junit.jar
ライブラリファイルを追加しました。
Junit.jarのさまざまなバージョンを試しました:4.4
、4.8
など。
この例外を修正するにはどうすればよいですか?
hamcrest-all-X.X.jar
をclasspathに追加します。
2015年2月現在の最新バージョンは1.3です。 http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=
JUnit GitHubチームのWebサイト( https://github.com/junit-team/junit/wiki/Download-and-Install )によると、JUnitを使用する場合はクラスパスにjunit.jar
とhamcrest-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>
あなたが従わなければならないいくつかのステップ:
私のために働く: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にリロードさせないでください。一度だけ。
Junit.jarには古いHamcrestクラスのコピーがあるため、junit-dep.jarが必要です。
この問題は、クラスパスミス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
ここで説明するように、hamcrest-core JARをクラスパスに追加する必要があります。 https://github.com/junit-team/junit4/wiki/Download-and-Install
一般的なルールとして、ハムパストがクラスパス上の他のテストライブラリの前にあることを常に確認してください。そのようなライブラリの多くはハムクレストクラスを含んでおり、使用しているハムクレストバージョンと競合する可能性があるためです。これにより、説明しているタイプのほとんどの問題が解決されます。
ここにnetbeansを使用している人がいて、同じ問題を抱えている場合に備えて、あなたがしなければならないことは
これで問題が解決するはずです
これは、コマンドラインからAntを実行したときに発生します。暗黙的なユーザー依存関係は、最後にクラスパスに追加され、プロジェクトが追加したクラスパスよりも優先されます。 -nouserlib
フラグを指定してAntを実行します。暗黙的な依存関係はクラスパスから除外されます。
問題を解決する最も簡単な方法は、アプリケーションのコンパイルと実行に必要な他の.jarファイルを保存するファイルであるCLASSPATHにhamcrest-code.jarの最新バージョンをコピーすることです。
例:C:/ ant/lib
この問題がRCPプロジェクトで発生した場合、JUnitが明示的にインポートされていることが原因である可能性があります。
Dependencies
タブでplugin.xml
のエディターを確認し、インポートされたパッケージからorg.junit
を削除し、org.junit
をRequired Plug-insに追加します。
問題は、JDKではなくJREを指すようにEclipseをセットアップした場合です。 JREのjunit4.jar
フォルダーにはlib/ext
がありますが、hamcrest.jar
にはありません:)したがって、Eclipseでインストール済みのJREを確認し、既存のJREを削除して、JDKを指す新しいJREを作成します。
クラスパスの問題のように聞こえるので、いくつかの異なる方法があります。 org/hamcret/SelfDescribingはどこから来たのですか?それはあなたのクラスですか、それとも別の瓶ですか?
プロジェクトのビルドパスに移動し、[ライブラリ]タブでライブラリを追加してください。プロジェクトに対してJUnitを選択できるはずです。これは、プロジェクトにJUnit jarファイルを置くこととは少し異なります。
JUnitテストの実行構成で、クラスパスを確認します。クラスパスがそのSelfDescribingクラスを確認できるように追加することで、おそらくこれを修正できます。 Eclipseの[実行]オプションには、JUnitオプション用のさまざまなオプションセットがあります。
この問題を解決するためのより良い答えがあります。依存関係を追加
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
私は同じ問題を抱えていました、解決策はビルドパス/プラグインにjar org.hamcrest.core_1xxを追加することです、それはEclipse/pluginsで見つけることができます。