java.lang.NoClassDefFoundError:org / hamcrest / SelfDescribing
在eclipse
运行junit
testing时,我得到这个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.jar
和hamcrest-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重新加载它。 就一次。
你必须遵循几个步骤:
- 右键点击该项目。
- selectBuild Path然后从菜单中selectAdd Libraries。
- selectJUnit,然后单击下一步。
- 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