繁体   English   中英

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

[英]java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

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

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

我添加了junit.jar库文件。

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

如何修复此异常?

hamcrest-all-XXjar添加到您的类路径

截至 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.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>

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

  1. 右键单击项目。
  2. 选择 Build Path 然后从它的菜单中选择 Add Libraries。
  3. 选择 JUnit,然后单击下一步。
  4. 选择 JUnit4,然后选择完成。

适用于我: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 并遇到同样的问题,您所要做的就是

  • 右键单击 TestLibraries
  • 点击添加库
  • 选择 JUnit 并单击添加库
  • 重复该过程,但这次单击 Hamcrest 并单击添加库

这应该可以解决问题

这个问题是因为你的类路径缺少 hamcrest-core-1.3.jar。 要解决此问题,请在将 junit-4.XX.jar 添加到类路径时添加 hamcrest-core-1.3.jar。

一开始我也遇到这个问题,但是参考官网,用命令行在classpath中添加hamcrest-core-1.3.jar后,终于正常了。

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-core JAR 添加到类路径中,如下所述: https : //github.com/junit-team/junit4/wiki/Download-and-Install

作为一般规则,始终确保 hamcrest 在类路径上的任何其他测试库之前,因为许多此类库包含 hamcrest 类,因此可能与您使用的 hamcrest 版本冲突。 这将解决您所描述类型的大多数问题。

首先解决问题的最简单方法是将最新版本的 hamcrest-code.jar 复制到您的 CLASSPATH 中,该文件是您存储编译和运行应用程序所需的其他 .jar 文件的文件。

可以是例如:C:/ant/lib

这听起来像是一个类路径问题,所以有几种不同的方法来解决它。 org/hamcret/SelfDescribing 从哪里来? 那是你的班级还是在不同的罐子里?

尝试转到您的项目构建路径并在库选项卡上添加一个库。 您应该能够为您的项目选择 JUnit。 这与在您的项目中仅包含 JUnit jar 文件有点不同。

在 JUnit 测试的运行配置中,检查类路径。 您可以通过添加确保您的 Classpath 可以在那里看到 SelfDescribing 类来解决这个问题。 Eclipse 中的 Run 选项对于 JUnit 选项有一组不同的选项。

如果在 RCP 项目中出现此问题,可能是因为已显式导入 JUnit。

Dependencies选项卡下检查plugin.xml的编辑器,从 Imported Packages 中删除org.junit并将org.junit添加到 Required Plug-ins。

问题是当您将 eclipse 设置为指向JRE而不是JDK 时 JRE 在lib/ext文件夹中有junit4.jar ,但没有hamcrest.jar :) 因此,解决方案是检查 Eclipse 中已安装的 JRE,删除现有的 JRE 并创建一个指向您的JDK的新 JRE。

当您通过命令行运行 Ant 时会发生这种情况。 隐式用户依赖项添加在最后的类路径中,并优先于项目添加的类路径。 使用-nouserlib标志运行 Ant。 隐式依赖项将从类路径中排除。

有一个更好的答案来解决这个问题。 添加依赖

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>

maven 存储库中提供的 hamcrest-core-1.3.jar 已弃用。

从官方Junit4 github 链接下载工作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>

我遇到了同样的问题,解决方法是在jar org.hamcrest.core_1xx 中添加构建路径/插件,您可以在eclipse/plugins 中找到它。

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

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

这对我有用...

"java.lang.SecurityException: class" org.hamcrest.Matchers "的签名者信息与同一包中其他类的签名者信息不匹配"

这样做:右键单击您的包,单击 Build Path -> Configure Build Path 单击 Libraries 选项卡 删除 JUnit Apply 并关闭 Ready。

尝试手动添加 jar 文件或尝试使用最新的 hamcrest.jar 强制更新

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM