在运行junit
测试时,eclipse
我得到这个Exception
:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
我添加了junit.jar
库文件。
我试过不同版本的junit.jar的:4.4
,4.8
等等。
如何解决此异常?
harcrest
罐子中,层次结构是否相同?如中所述org > hamcrest > SelfDescribing
,还是在jar的根文件夹中?
在运行junit
测试时,eclipse
我得到这个Exception
:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
我添加了junit.jar
库文件。
我试过不同版本的junit.jar的:4.4
,4.8
等等。
如何解决此异常?
harcrest
罐子中,层次结构是否相同?如中所述org > hamcrest > SelfDescribing
,还是在jar的根文件夹中?
Answers:
添加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=
hamcrest-all-X.X.jar
足够而小得多。
据JUnit的GitHub的团队网站(https://github.com/junit-team/junit/wiki/Download-and-Install),junit.jar
并hamcrest-core.jar
使用JUnit 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>
PS:保存文件,不要让IntelliJ Idea重新加载它。就一次。
您需要junit-dep.jar,因为junit.jar具有旧Hamcrest类的副本。
此问题是由于您的类路径缺少hamcrest-core-1.3.jar所致。要解决此问题,请在将junit-4.XX.jar添加到类路径中时添加hamcrest-core-1.3.jar。
一开始,我也遇到了这个问题,但是在我参考官方站点并使用命令行将hamcrest-core-1.3.jar添加到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
通常,请确保hamcrest在类路径上的任何其他测试库之前,因为许多此类库都包含hamcrest类,因此可能与您使用的hamcrest版本冲突。这将解决您所描述类型的大多数问题。
以防万一有人在使用netbeans并遇到相同的问题,您要做的就是
这应该解决问题
您需要按以下说明将hamcrest-core JAR添加到类路径:https : //github.com/junit-team/junit4/wiki/Download-and-Install
听起来像是类路径问题,所以有几种不同的解决方法。org / hamcret / SelfDescribing来自哪里?那是您的班级还是在另一个罐子里?
尝试转到项目的“构建路径”,然后在“库”选项卡上,添加一个库。您应该能够在项目中选择JUnit。这与在项目中仅包含JUnit jar文件有所不同。
在JUnit测试的运行配置中,检查类路径。您可以通过添加确保您的Classpath可以在其中看到SelfDescribing类来解决此问题。Eclipse中的Run选项为JUnit选项提供了一组不同的选项。
通过命令行运行Ant时会发生这种情况。隐式用户依赖项最后添加到类路径中,并且优先于项目添加的类路径。用-nouserlib
标志运行Ant 。隐式依赖关系将从类路径中排除。
我有同样的问题,解决方案是在org.hamcrest.core_1xx罐子中添加构建路径/插件,您可以在eclipse / plugins中找到它。
您必须遵循的几个步骤:
这对我有用...
junit.jar
与问题无关