java.lang.NoClassDefFoundError:org/hamcrest/selfdescription

java.lang.NoClassDefFoundError:org/hamcrest/selfdescription,java,eclipse,junit,noclassdeffounderror,hamcrest,Java,Eclipse,Junit,Noclassdeffounderror,Hamcrest,在eclipse中运行junit测试时,我得到了这个异常: java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing 我已经添加了junit.jar库文件 我尝试过junit.jar的不同版本:4.4,4.8,等等 如何修复此异常?听起来像是类路径问题,所以有几种不同的方法来解决。org/hamcret/selfdescription从何而来?那是你的课还是在另一个罐子里 尝试转到项目生成路径,并在“库”选项卡上添加库。您应该能够在

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

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
我已经添加了
junit.jar
库文件

我尝试过junit.jar的不同版本:
4.4
4.8
,等等


如何修复此异常?

听起来像是类路径问题,所以有几种不同的方法来解决。org/hamcret/selfdescription从何而来?那是你的课还是在另一个罐子里

尝试转到项目生成路径,并在“库”选项卡上添加库。您应该能够在项目中选择JUnit。这与在项目中使用JUnit jar文件有点不同


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

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

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

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

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

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


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

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

    hamcrest-all-X.X.jar
    添加到类路径中

    截至2015年2月的最新版本为1.3:

    根据JUnit GitHub团队网站(),
    JUnit.jar
    hamcrest core.jar
    都是使用JUnit 4.11时在类路径中需要的

    下面是包含junit和hamcrest的Maven依赖项块

    
    朱尼特
    朱尼特
    4.1.2
    测试
    org.hamcrest
    汉克雷斯特酒店
    1.3
    测试
    
    适合我:IntelliJ IDEA 13.1.1、JUnit4、Java 6

    我更改了项目路径:[project\u NAME].iml中的文件

    取代:

      <library>
        <CLASSES>
          <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.11.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>
    
    
    

    注意:保存文件,不要让IntelliJ Idea重新加载。只有一次。

    问题是当您将eclipse设置为指向JRE而不是JDK时。JRE在
    lib/ext
    文件夹中有
    junit4.jar
    ,但没有
    hamcrest.jar
    :),因此解决方案是检查Eclipse中已安装的JRE,删除现有的JRE,并创建一个指向您的JDK的新JRE,以防有人在这里使用netbeans并遇到同样的问题,你所要做的就是

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

    这应该可以解决问题

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


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

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

    起初,我也遇到了这个问题,但在我参考并使用命令行将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
    

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

    您需要将hamcrest core JAR添加到类路径中,如下所述:

    有更好的解决方法。 添加依赖项

    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-all</artifactId>
        <version>1.3</version>
        <scope>test</scope>
    </dependency>
    
    
    org.hamcrest
    汉克雷斯特酒店
    1.3
    测试
    
    您必须遵循以下几个步骤:

    • 右键单击项目
    • 选择buildpath&然后从其菜单中选择addlibraries
    • 选择JUnit,然后单击Next
    • 选择JUnit4,然后完成

    这对我来说很有用…

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

    从官方网站下载working
    hamcrest-core-1.3.jar
    。 如果您想从maven存储库下载,请使用最新的
    hamcrest XX.jar

    
    org.hamcrest
    汉克雷斯特
    2.2
    测试
    
    “java.lang.SecurityException:类“org.hamcrest.Matchers”的签名者信息与同一包中其他类的签名者信息不匹配”

    做它: 右键单击您的包 单击构建路径->配置构建路径 单击“库”选项卡 删除JUnit 应用并关闭
    准备就绪。

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

    根据您的描述,
    junit.jar
    harcrest
    jar中的问题无关,是
    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-all</artifactId>
        <version>1.3</version>
        <scope>test</scope>
    </dependency>