在junit
中运行eclipse
测试时,我收到此Exception
:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
我添加了junit.jar
库文件。
我尝试过不同版本的junit.jar:4.4
,4.8
等。
如何修复此异常?
答案 0 :(得分:84)
将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=
答案 1 :(得分:50)
根据JUnit GitHub团队网站(https://github.com/junit-team/junit/wiki/Download-and-Install),使用JUnit 4.11时类路径中都需要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>
答案 2 :(得分:22)
您必须遵循以下几个步骤:
答案 3 :(得分:16)
适合我: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>
P.S。:保存文件,不要让IntelliJ Idea重新加载它。只有一次。
答案 4 :(得分:4)
你需要junit-dep.jar,因为junit.jar有一个旧的Hamcrest类的副本。
答案 5 :(得分:3)
这个问题是因为你的classpath miss hamcrest-core-1.3.jar。要解决此问题,请在将junit-4.XX.jar添加到类路径中时添加hamcrest-core-1.3.jar。
首先,我也遇到了这个问题,但是在我引用official site并使用命令行将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
答案 6 :(得分:2)
万一有人在这里使用netbeans并遇到同样的问题,你所要做的就是
这应解决问题
答案 7 :(得分:2)
您需要按照以下说明将hamcrest-core JAR添加到类路径:https://github.com/junit-team/junit4/wiki/Download-and-Install
答案 8 :(得分:2)
作为一般规则,始终确保hamcrest位于类路径上的任何其他测试库之前,因为许多此类库包含hamcrest类,因此可能与您正在使用的hamcrest版本冲突。这将解决您所描述类型的大多数问题。
答案 9 :(得分:1)
问题在于您将eclipse设置为指向 JRE 而不是 JDK 。 JRE在junit4.jar
文件夹中有lib/ext
,但不是hamcrest.jar
:)所以解决方案是在Eclipse中检查已安装的JRE,删除现有的JRE并创建一个指向 JDK 强>
答案 10 :(得分:1)
这听起来像是一个类路径问题,因此有几种不同的方法可以解决它。 org / hamcret / SelfDescribing来自哪里?那是你的班级还是在一个不同的罐子里?
尝试转到项目构建路径,然后在“库”选项卡上添加“库”。您应该能够为项目选择JUnit。这与在项目中使用JUnit jar文件略有不同。
在JUnit测试的运行配置中,检查Classpath。您可以通过添加确保您的Classpath可以在那里看到SelfDescribing类来解决这个问题。 Eclipse中的Run选项为JUnit选项提供了一组不同的选项。
答案 11 :(得分:1)
解决问题的最简单方法是将最新版本的hamcrest-code.jar复制到CLASSPATH中,该文件是存储编译和运行应用程序所需的其他.jar文件的文件。
可能是例如:C:/ ant / lib
答案 12 :(得分:1)
如果在RCP项目中出现此问题,可能是因为已明确导入JUnit。
在plugin.xml
标签下的Dependencies
检查编辑器,从导入的包中删除org.junit
,然后将org.junit
添加到必需的插件中。
答案 13 :(得分:1)
当您通过命令行运行Ant时会发生这种情况。隐式用户依赖项最后添加在类路径中,并优先于项目添加的类路径。使用 -nouserlib
标志运行Ant。隐式依赖项将从类路径中排除。
答案 14 :(得分:0)
我遇到了同样的问题,解决方案是在jar org.hamcrest.core_1xx中添加构建路径/插件,你可以在eclipse / plugins中找到它。
答案 15 :(得分:0)
有一个更好的答案来解决此问题。 添加依赖性
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
答案 16 :(得分:0)
您必须遵循的几个步骤:
这对我有用...
答案 17 :(得分:0)
不推荐使用maven存储库中的hamcrest-core-1.3.jar。
从官方Junit4 github link下载工作hamcrest-core-1.3.jar
。
如果要从maven存储库下载,请使用最新的hamcrest-XX.jar
。
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
答案 18 :(得分:0)
"java.lang.SecurityException: class" org.hamcrest.Matchers "的签名者信息与同一包中其他类的签名者信息不匹配"
这样做: 右键单击您的包 单击构建路径 -> 配置构建路径 单击库选项卡 删除 JUnit 应用并关闭 准备好了。
答案 19 :(得分:0)
尝试手动添加 jar 文件或尝试使用最新的 hamcrest.jar 强制更新