Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

При запуске junit test в eclipse я получаю этот Exception:

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

Я добавил файл библиотеки junit.jar.

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

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

Ответ 2

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

Ответ 3

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

  • Щелкните правой кнопкой мыши проект.
  • Выберите путь сборки. Затем в его меню выберите "Добавить библиотеки".
  • Выберите JUnit и нажмите "Далее".
  • Выберите JUnit4, затем Закончите.

Ответ 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

Эта проблема возникает из-за вашего промаха класса 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

Ответ 7

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

Ответ 8

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

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

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

Ответ 10

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

Попробуйте перейти на вкладку "Путь к проекту" и на вкладке "Библиотеки", добавьте библиотеку. Вы должны выбрать JUnit для своего проекта. Это немного отличается от того, что у вас есть файл JUnit jar. В вашем проекте.

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

Ответ 11

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

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

Ответ 12

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

Ответ 13

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

которые могут быть, например,: C:/ ant/lib

Ответ 14

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

Ответ 15

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

Ответ 16

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

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