在运行junit
测试时,eclipse
我得到了这个Exception
:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
我添加了junit.jar
库文件。
我试过不同版本的 junit.jar: 4.4
, 4.8
, 等等。
如何修复此异常?
在运行junit
测试时,eclipse
我得到了这个Exception
:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
我添加了junit.jar
库文件。
我试过不同版本的 junit.jar: 4.4
, 4.8
, 等等。
如何修复此异常?
添加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=
根据 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>
您必须遵循以下几个步骤:
适合我: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 类的副本。
万一有人在这里使用netbeans并且遇到同样的问题,你所要做的就是
这应该可以解决问题
您需要将 hamcrest-core JAR 添加到类路径中,如下所述:https ://github.com/junit-team/junit4/wiki/Download-and-Install
这个问题是因为你的类路径错过了 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 版本冲突。这将解决您所描述类型的大多数问题。
开始解决问题的最简单方法是将最新版本的 hamcrest-code.jar 复制到您的 CLASSPATH 中,这是您存储编译和运行应用程序所需的其他 .jar 文件的文件。
例如:C:/ant/lib
这听起来像是一个类路径问题,所以有几种不同的方法可以解决它。org/hamcret/SelfDescribeing 来自哪里?那是你的课还是在不同的罐子里?
尝试转到您的项目构建路径,然后在库选项卡上,添加一个库。您应该能够为您的项目选择 JUnit。这与在您的项目中仅包含 JUnit jar 文件有点不同。
在 JUnit 测试的运行配置中,检查类路径。您可以通过添加确保您的 Classpath 可以在那里看到 SelfDescribeing 类来解决此问题。Eclipse 中的 Run 选项为 JUnit 选项提供了一组不同的选项。
如果在 RCP 项目中出现此问题,可能是因为已显式导入 JUnit。
检查plugin.xml
下Dependencies
选项卡的编辑器,org.junit
从 Imported Packages 中删除并添加org.junit
到 Required Plug-ins。
maven 存储库中可用的 hamcrest-core-1.3.jar 已弃用。
hamcrest-core-1.3.jar
从官方Junit4 github 链接下载工作。如果要从 maven 存储库下载,请使用 latest hamcrest-XX.jar
.
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
问题是当您将 eclipse 设置为指向JRE而不是JDK时。JREjunit4.jar
在lib/ext
文件夹中,但没有hamcrest.jar
:) 所以解决方案是在 Eclipse 中检查已安装的 JRE,删除现有的 JRE,然后创建一个指向您的JDK的新 JRE 。
有一个更好的答案来解决这个问题。添加依赖
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
当您通过命令行运行 Ant 时会发生这种情况。隐式用户依赖项添加到最后的类路径中,并优先于项目添加的类路径。运行带有-nouserlib
标志的 Ant。隐式依赖项将从类路径中排除。
我有同样的问题,解决方法是在jar org.hamcrest.core_1xx 中添加构建路径/插件,你可以在eclipse/plugins 中找到它。
您必须遵循以下几个步骤:
这对我有用...
尝试手动添加 jar 文件或尝试使用最新的 hamcrest.jar 强制更新
“java.lang.SecurityException: class”org.hamcrest.Matchers“的签名者信息与同一个包中其他类的签名者信息不匹配”
这样做:右键单击您的包,单击 Build Path -> Configure Build Path 单击 Libraries 选项卡 Remove JUnit Apply 并关闭 Ready。