Ant + JUnit: NoClassDefFoundError

Хорошо, я расстроен! Я охотился много часов и все еще в тупике.

Среда: WinXP, Eclipse Galileo 3.5 (прямая установка - без дополнительных плагинов).

Итак, у меня есть простой тест JUnit. Он отлично работает из внутренней конфигурации запуска Eclipse JUnit. Этот класс не зависит ни от чего. Чтобы максимально сузить эту проблему, она просто содержит:

@Test
public void testX() {
    assertEquals("1", new Integer(1).toString());
}

Пока нет пота. Теперь я хочу сделать супер продвинутый этап запуска этого тестового примера из Ant (конечная цель - интеграция с Hudson).

Итак, я создаю build.xml:

<project name="Test" default="basic">
    <property name="default.target.dir" value="${basedir}/target" />
    <property name="test.report.dir" value="${default.target.dir}/test-reports" />

    <target name="basic">
        <mkdir dir="${test.report.dir}" />
        <junit fork="true" printSummary="true" showOutput="true">
            <formatter type="plain" />
            <classpath>
                <pathelement path="${basedir}/bin "/>
            </classpath>
            <batchtest fork="true" todir="${test.report.dir}" >
                <fileset dir="${basedir}/bin">
                    <include name="**/*Test.*" />
                </fileset>
            </batchtest>
        </junit>
    </target>
</project>

$ {basedir} - это имя проекта Java в рабочей области, которое содержит исходный код, классы и файл сборки. Все файлы .java и build.xml находятся в $ {basedir} / src. Файлы .class находятся в $ {basedir} / bin.

Я добавил eclipse-install-dir / plugins / org.junit4_4.5.0.v20090423 / junit.jar в путь к классам выполнения Ant через Windows / Preferences / Ant / Runtime / Contributed Entries. ant-junit.jar находится в Ant Home Записи.

Итак, что происходит, когда я запускаю эту безумно сложную цель? Мой файл отчета содержит:

Testsuite: com.xyz.test.RussianTest
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec

Testcase: initializationError took 0 sec
Caused an ERROR
org/hamcrest/SelfDescribing
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)

Что это за класс org.hamcrest.SelfDescribing? Что-то связанное с издевательствами? Хорошо. Но почему зависимость? Я ничего с этим не делаю. Это буквально Java-проект без каких-либо зависимостей, кроме JUnit.

В тупик (и разочарование)!

Ответы на вопрос(14)

Ваш ответ на вопрос