【问题标题】:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribingjava.lang.NoClassDefFoundError: org/hamcrest/SelfDescribeing
【发布时间】:2013-01-10 10:27:55
【问题描述】:

eclipse 中运行junit 测试时,我得到了这个Exception

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

我已经添加了junit.jar 库文件。

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

如何解决这个异常?

【问题讨论】:

  • 根据您的描述,junit.jar与问题无关
  • harcrest jar 中的层次结构是否相同?和org > hamcrest > SelfDescribing一样,还是在jar的根目录下?
  • 这个错误可能不是junit jar,可能你的项目中有些东西需要其他jar,这里有一些org.hamcrest.SelfDescribing - known versions
  • 谢谢,但我在项目中没有其他内容,我已经创建了这个新项目。

标签: java eclipse junit noclassdeffounderror hamcrest


【解决方案1】:

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=

【讨论】:

  • 如何将它添加到类路径或检查它是否添加?
  • 同意,如何做到这一点会很有帮助。幸运的是下面的评论有它。
  • @TomášZato 首先:检查文件。这是 hamcrest-all(获得 all 很重要)。在 Idea-IDEs 中添加了一个依赖项 1. 将文件复制/粘贴到 libs 文件夹(或其他任何地方) 2. 单击文件“添加为库” 3. 检查 .java 文件中的导入语句。跨度>
  • hamcrest-all-X.X.jar 足够小了。
  • 文件 --- 项目结构 --- 库 --- '+' --- Java --- ....jar (你已经下载) --- 好的,它会显示在“外部库”中。
【解决方案2】:

根据 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>

【讨论】:

  • 我在 Junit 5 中遇到了这个问题,尽管它应该在没有它的情况下工作
【解决方案3】:

您必须遵循的几个步骤:

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

【讨论】:

  • 这为我解决了问题。对于不习惯使用 java/Eclipse 的人来说,这非常有帮助。我还想提一下,我的讲师为课堂提供的实验室有一个 Junit(可能是 3)版本,它不适用于我的实验室/Eclipse 版本。我不得不删除它并添加 4,现在一切都很好。非常感谢。
  • 这在您使用命令提示符运行构建时不起作用。这是一个“IDE”唯一的解决方案。
【解决方案4】:

适合我: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 重新加载它。就一次。

【讨论】:

  • 超级棒!!帮助我完成当前的项目。
【解决方案5】:

您需要 junit-dep.jar,因为 junit.jar 具有旧 Hamcrest 类的副本。

【讨论】:

  • 这个罐子在哪里?
【解决方案6】:

万一有人在这里使用netbeans并且遇到同样的问题,你所要做的就是

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

这应该可以解决问题

【讨论】:

  • 谢谢,这对我有用。我已经有了 JUnit 库,但我缺少 Hamcrest。
【解决方案7】:

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

一开始我也遇到这个问题,但是参考official site,用命令行在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

【讨论】:

    【解决方案8】:

    您需要将 hamcrest-core JAR 添加到类路径中,如下所述:https://github.com/junit-team/junit4/wiki/Download-and-Install

    【讨论】:

      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

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

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

        【讨论】:

          【解决方案11】:

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

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

          在 JUnit 测试的运行配置中,检查类路径。您可以通过添加确保您的 Classpath 可以在那里看到 SelfDescribeing 类来解决此问题。 Eclipse 中的 Run 选项为 JUnit 选项提供了一组不同的选项。

          【讨论】:

          • 它不是类路径的问题,因为我已经在构建路径中添加了 junit 库文件,即使在 junit 库中也有对 hamcrest 的引用,即 C:/devTools/eclipse-SDK-4.2 .1-win32-x86_64/eclipse/plugins/org.hamcrest.core.source_1.1.0.v20090501071000.jar
          • 感谢您的回复,testNG 工作正常,看来我得在 junit 上退出了
          • 我只是在想,当您将某些东西作为单元测试运行时,JUnit 实际上会启动一个新的 JVM。这意味着它有时使用与您的项目不同的类路径。有时为了调试这些类型的东西,我会从我的代码中打印出 java 类路径,这样我就可以比较它执行时的差异。 java-tips.org/java-se-tips/java.lang/…
          【解决方案12】:

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

          Dependencies 选项卡下检查plugin.xml 的编辑器,从导入的包中删除org.junit 并将org.junit 添加到所需的插件中。

          【讨论】:

            【解决方案13】:

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

            【讨论】:

              【解决方案14】:

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

              【讨论】:

                【解决方案15】:

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

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

                【讨论】:

                  【解决方案16】:

                  ma​​ven 存储库中可用的 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>
                  

                  【讨论】:

                    【解决方案17】:

                    我也遇到了同样的问题,解决方法是在jar org.hamcrest.core_1xx 中加入build path/plugin,你可以在eclipse/plugins 中找到。

                    【讨论】:

                      【解决方案18】:

                      您必须遵循的几个步骤:

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

                      这对我有用...

                      【讨论】:

                        【解决方案19】:

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

                        这样做: 右键单击您的包 单击构建路径-> 配置构建路径 单击库选项卡 删除 JUnit 申请并关闭 准备好了。

                        【讨论】:

                          【解决方案20】:

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2013-07-09
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-06-02
                            相关资源
                            最近更新 更多