java.lang.NoClassDefFoundError:org / hamcrest / SelfDescribing

时间:2013-01-26 16:41:16

标签: java eclipse junit noclassdeffounderror hamcrest

junit中运行eclipse测试时,我收到此Exception

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

我添加了junit.jar库文件。

我尝试过不同版本的junit.jar:4.44.8等。

如何修复此异常?

20 个答案:

答案 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.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>

答案 2 :(得分:22)

您必须遵循以下几个步骤:

  1. 右键单击该项目。
  2. 选择Build Path然后从其菜单中选择Add Libraries。
  3. 选择JUnit,然后单击“下一步”。
  4. 选择JUnit4,然后选择Finish。

答案 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并遇到同样的问题,你所要做的就是

  • 右键单击TestLibraries
  • 点击添加图书馆
  • 选择JUnit并单击添加库
  • 重复此过程,但这次点击Hamcrest和点击添加库

这应解决问题

答案 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)

您必须遵循的几个步骤:

  • 右键单击该项目。
  • 选择“构建路径”,然后从其菜单中选择“添加库”。
  • 选择JUnit,然后单击Next。
  • 选择JUnit4,然后完成。

这对我有用...

答案 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 强制更新