簡體   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