Ant + JUnit: NoClassDefFoundError

Ok, je suis frustré! J'ai chassé autour d'un bon nombre d'heures et je suis encore perplexe.

Environnement: WinXP, Eclipse Galileo 3.5 (directement à installer - aucun des plugins supplémentaires).

Donc, j'ai un simple test JUnit. Il fonctionne très bien, il est interne, Eclipse, JUnit configuration d'exécution. Cette classe n'a pas de dépendances sur quoi que ce soit. Pour limiter ce problème, autant que possible, il contient tout simplement:

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

Pas de soucis jusqu'à présent. Maintenant je veux profiter de la super avancé à l'étape de l'exécution de ce cas de test à partir de l'intérieur de la Fourmi (le but final est d'intégrer avec d'Hudson).

Donc, j'ai créer un 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} est la Java nom du projet dans l'espace de travail qui contient la source, de classes et de construire de fichier. Tous les .de java et de l'build.xml sont dans ${basedir}/src. L' .les fichiers de classe sont dans ${basedir}/bin.

J'ai ajouté eclipse-install-dir/plugins/org.junit4_4.5.0.v20090423/junit.jar à la Fourmi d'Exécution Classpath via Windows /Préférences /Ant /Runtime /a Contribué Entrées. ant-junit.jar est en Ant la Maison des Entrées.

Donc, ce qui se passe quand je lance cette incroyablement complexe cible? Mon fichier de rapport contient:

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)

Qu'est-ce que ce org.hamcrest.SelfDescribing classe? Quelque chose à faire avec des objets fantaisie? OK, très bien. Mais pourquoi la dépendance? Je ne fais rien du tout avec elle. C'est littéralement un projet Java avec pas de dépendance, autres que JUnit.

Perplexe (et frustré)!!

  • Dans mon cas, ce problème est venu quand il est déplacé d'un projet à partir de la version 1.6 de java pour java 1.5. Je ne sais pas si cela est important.
InformationsquelleAutor SteveT | 2009-07-23