java.lang.NoClassDefFoundError:org / hamcrest / SelfDescribing

eclipse运行junittesting时,我得到这个Exception

 java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing 

我已经添加了junit.jar库文件。

我试过不同版本的junit.jar:4.4,4.8等

我如何解决这个例外?

hamcrest-all-XXjar添加到你的类path中

截至2015年2月的最新版本为1.3: http : //code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can= 2& q=

根据JUnit GitHub团队网站( https://github.com/junit-team/junit/wiki/Download-and-Install ),在使用JUnit 4.11时,classpath中都需要junit.jarhamcrest-core.jar

这里是包含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

我在项目path中更改了文件:[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重新加载它。 就一次。

你必须遵循几个步骤:

  1. 右键点击该项目。
  2. selectBuild Path然后从菜单中selectAdd Libraries。
  3. selectJUnit,然后单击下一步。
  4. selectJUnit4然后完成。

你需要junit-dep.jar,因为junit.jar有一个旧的Hamcrest类的副本。

作为一般规则,确保hamcrest在classpath中的任何其他testing库之前,因为许多这样的库包括hamcrest类,因此可能与您正在使用的hamcrest版本冲突。 这将解决您所描述types的大多数问题。

如果在RCP项目中出现这个问题,可能是因为JUnit已被明确导入。

检查编辑器在Dependencies选项卡下的plugin.xml ,从导入的包中删除org.junit并将org.junit添加到必需的插件。

以防万一有人在这里使用NetBeans,并有同样的问题,所有你需要做的是

  • 右键单击TestLibraries
  • 点击添加库
  • selectJUnit并单击添加库
  • 重复这个过程,但这次点击Hamcrest和点击添加库

这应该解决这个问题

这个问题是因为你的类path错过了hamcrest-core-1.3.jar。 要解决这个问题,可以在你的类path中添加junit-4.XX.jar来添加hamcrest-core-1.3.jar。

起初我也遇到过这个问题,但是在我参考官方网站后 ,用命令行将hamcrest-core-1.3.jarjoin到classpath中,最终运行正常。

 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 

这听起来像是一个类path问题,所以有几种不同的方法去做。 org / hamcret / SelfDescribing从哪里来? 这是你的课程还是在另一个jar子里?

尝试转到您的项目构buildpath,并在库选项卡上添加一个库。 你应该可以selectJUnit到你的项目中。 这与仅仅在项目中使用JUnit jar文件有点不同。

在JUnittesting的运行configuration中,检查Classpath。 您可以通过添加确保您的Classpath可以看到那里的SelfDescribing类来解决这个问题。 Eclipse中的“运行”选项为JUnit选项提供了一组不同的选项。

我有同样的问题,解决的办法是添加构buildpath/插件的jar org.hamcrest.core_1xx,你可以在eclipse / plugins中find它。

问题是当你设置eclipse指向JRE而不是JDK时 。 JRE在lib/ext文件夹中有junit4.jar ,但不是hamcrest.jar :)所以解决方法是在Eclipse中检查已安装的JRE,删除现有的JRE并创build一个指向JDK的新JRE。

解决问题的最简单方法是将最新版本的hamcrest-code.jar复制到您的CLASSPATH中,该文件是用于存储编译和运行应用程序所需的其他.jar文件的文件。

可能是例如:C:/ ant / lib