it-swarm.com.ru

java.lang.NoClassDefFoundError: org / hamcrest / SelfDescribing

Во время выполнения теста junit в Eclipse я получаю это Exception:

Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

Я добавил junit.jar библиотечный файл.

Я пробовал разные версии junit.jar: 4.4, 4.8 и т.д.

Как я могу исправить это исключение?

103
user2013948

Добавьте hamcrest-all-X.X.jar к своему пути к классам .

Последняя версия на февраль 2015 года - 1.3: http://code.google.com/p/hamcrest/downloads/detail?name=hamcrest-all-1.3.jar&can=2&q=

84
Jiacai Liu

Согласно веб-сайту команды JUnit GitHub ( https://github.com/junit-team/junit/wiki/Download-and-Install ), junit.jar и hamcrest-core.jar оба необходимы в classpath при использовании JUnit 4.11.

Вот блок зависимостей Maven для включения junit и hamcrest.

<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>
50
jkwuc89

Несколько шагов, которые вы должны выполнить:

  1. Щелкните правой кнопкой мыши на проекте.
  2. Выберите Build Path. Затем в его меню выберите Add Libraries.
  3. Выберите JUnit, затем нажмите Next.
  4. Выберите JUnit4, затем Готово.
22
Muhammed Refaat

У меня работает: 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>

П.С .: сохраните файл и не позволяйте IntelliJ Idea перезагрузить его. Только раз.

16
GUEST

Вам нужен junit-dep.jar, потому что в junit.jar есть копия старых классов Hamcrest.

4
Stefan Birkner

Эта проблема из-за вашей нехватки classpath hamcrest-core-1.3.jar. Чтобы решить эту проблему, добавьте hamcrest-core-1.3.jar при добавлении junit-4.XX.jar в ваш путь к классам.

Сначала я тоже сталкиваюсь с этой проблемой, но после того, как я обращаюсь к официальному сайту и добавляю 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
3
Saint

Вам нужно добавить JAR-файл hamcrest-core в classpath, как описано здесь: https://github.com/junit-team/junit4/wiki/Download-and-Install

2
ayush agrahari

Как правило, всегда проверяйте наличие Hamcrest перед любыми другими библиотеками тестирования на пути к классам, так как многие такие библиотеки включают классы Hamcrest и поэтому могут конфликтовать с используемой версией Hamcrest. Это решит большинство проблем описываемого вами типа.

2
Ryan Stewart

На всякий случай, если кто-то использует NetBeans и имеет ту же проблему, все, что вам нужно сделать, это

  • Щелкните правой кнопкой мыши на TestLibraries
  • Нажмите на Добавить библиотеку
  • Выберите JUnit и нажмите добавить библиотеку
  • Повторите процесс, но на этот раз нажмите на Hamcrest и нажмите кнопку Добавить библиотеку

Это должно решить проблему

2
Michael Ogala

Это происходит, когда вы запускаете Ant через командную строку. Неявные пользовательские зависимости добавляются в classpath в конце и имеют приоритет над добавленным проектом classpath. Запустите Ant с флагом -nouserlib. Неявные зависимости будут исключены из пути к классам.

1
Devendra Sharma

самый простой способ решения проблемы - это скопировать последнюю версию hamcrest-code.jar в ваш CLASSPATH, который является файлом, в котором вы храните другие файлы .jar, необходимые для компиляции и запуска вашего приложения.

это может быть, например: C:/ant/lib

1
estudiante

Если эта проблема возникает в проекте RCP, это может быть связано с тем, что JUnit был явно импортирован.

Проверьте редактор для своего plugin.xml на вкладке Dependencies, удалите org.junit из Импортированных пакетов и добавьте org.junit в Обязательные плагины.

1
Robert F

Проблема в том, что вы настраиваете Eclipse для указания на JRE вместо JDK. JRE имеет junit4.jar в папке lib/ext, но не hamcrest.jar :) Поэтому решение состоит в том, чтобы проверить установленные JRE в Eclipse, удалить существующую и создать новую, указывающую на JDK.

1
ACV

Это звучит как проблема с classpath, поэтому есть несколько способов решить эту проблему. Откуда берется org/hamcret/SelfDescribing? Это твой класс или в другой банке?

Попробуйте перейти в свой проект Build Path и на вкладке Libraries добавить библиотеку. Вы должны быть в состоянии выбрать JUnit для вашего проекта. Это немного отличается от того, что в вашем проекте есть JAR-файл JUnit.

В конфигурации запуска для теста JUnit проверьте путь к классам. Возможно, вы могли бы исправить это, добавив, что ваш Classpath может видеть этот класс SelfDescribing там. Опция Run в Eclipse имеет другой набор опций для опций JUnit.

1
Logan

Есть лучший ответ, чтобы решить эту проблему. добавить зависимость

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

У меня была та же проблема, решение состоит в том, чтобы добавить в путь сборки/плагин jar org.hamcrest.core_1xx, вы можете найти его в Eclipse/plugins.

0
Mohamed Iyeb Abed Rabou