ein weiteres java.lang.ClassNotFoundException in ant-junit-task
Ich kann nicht herausfinden, warum ich immer diese Ausnahme von meinem ant build.xml Datei. Habe ich überprüft und alles ist in den classpath. Warum muss das so kompliziert?!
Hatte ich Probleme mit der Ant in der Vergangenheit und es scheint, dass es immer etwas mit dem classpath. Ich darauf zu junit.jar mit beiden Möglichkeiten: in eclipse: window->Einstellungen->ant->runtime->Ant Home->Add External Jars, und auch innerhalb der build.xml script. Diese Zeit, die Ameise ist nicht in der Lage zu finden, meine Testklasse in junit Aufgabe. Gibt es etwas falsch mit der Art, wie ich darauf an dieser Klasse?
<target name="init">
<property name="sourceDir" value="src"/>
<property name="outputDir" value="build" />
<property name="junitLocation" value="C:\...\org.junit4_4.3.1\junit.jar" />
</target>
<target name="clean" depends="init">
<delete dir="${outputDir}" />
</target>
<target name="prepare" depends="clean">
<mkdir dir="${outputDir}" />
</target>
<target name="compile" depends="prepare">
<javac srcdir="${sourceDir}" destdir="${outputDir}" classpath="${junitLocation}"/>
</target>
<path id="classpath">
<pathelement location="${outputDir}" />
<pathelement location="${junitLocation}" />
</path>
<target name="testApplication" depends="compile">
<echo>Running the junit tests...</echo>
<junit fork="yes" haltonfailure="yes">
<test name="my.package.MyTest" />
<formatter type="plain" usefile="false" />
<classpath refid="classpath" />
</junit>
</target>
Bin ich immer:
[junit] Testsuite: my.package.MyTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit] Caused an ERROR
[junit] my.package.MyTest
[junit] java.lang.ClassNotFoundException: my.package.MyTest
[junit] at java.net.URLClassLoader$1.run(Unknown Source)
[junit] at java.security.AccessController.doPrivileged(Native Method)
[junit] at java.net.URLClassLoader.findClass(Unknown Source)
[junit] at java.lang.ClassLoader.loadClass(Unknown Source)
[junit] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
[junit] at java.lang.ClassLoader.loadClass(Unknown Source)
[junit] at java.lang.ClassLoader.loadClassInternal(Unknown Source)
[junit] at java.lang.Class.forName0(Native Method)
[junit] at java.lang.Class.forName(Unknown Source)
BUILD FAILED
Offenbar, Ant findet junit.jar und versuche, um den test zu starten, aber warum kann es nicht finden, meine test-Klasse? Ich Stelle den Ordner mit kompilierten test-Klasse. Also ich weiß, dass junit ist auf Ant-classpath zumindest, aber die ClassNotFound verwirrt mich.
Irgendwelche Ideen vielleicht? Vielen Dank!
- Nur Kontrolle - Sie sehen ./build/my/package/MyTest.class? Sie sind sicher, es baut richtig?
- yep, sehe ich die kompilierte Klasse, in dem richtigen Verzeichnis sein, kein problem
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie sicher, dass Ihre test-Klasse ist in der
build
Ordner? Du bist Berufungjunit
in einer separaten JVM (fork=true), so ist es möglich, dass Arbeitsordner ändern würde während diesen Aufruf und mitbuild
sein verwandter, möglicherweise ein problem verursachen.Run ant von der Kommandozeile aus (nicht über Eclipse) mit -verbose (oder -debug-Schalter zu sehen, die detaillierte classpath /working dir
junit
wird aufgerufen mit und poste die Ergebnisse wieder hier, wenn du bist immer noch nicht lösen können dieses Problem.build
). Das sollte funktionieren. Details finden Sie hier: ant.apache.org/manual/OptionalTasks/junit.htmlMüssen Sie nicht fügen Sie die JUnit-jar in den classpath. Wenn ant nicht finden können, die
<junit>
Aufgabe wird nicht ausgeführt.Schlage ich vor, Sie versuchen, verschiedene Möglichkeiten zur Angabe des classpath, wie beschrieben, in der ant-doc an http://ant.apache.org/manual/using.html#path; speziell
<classpath path="${srcdir}" />
helfen könnte.Wenn nicht, ChssPly76 ' s Vorschlag ausgeführt ant -debug aus der command-line ist der best Wette. Sie stoßen bis der Puffer auf dem Fenster der Eingabeaufforderung, aber da ant-debugger ist extrem ausführlich.
<junit>
läuft nicht ohne junit.jar. Da Ant 1.7 ist es möglich, junit.jar im classpath der<junit>
Aufgabe, solangeant-junit.jar
steht Ant. Das sagte, ich bin damit einverstanden, es ist nicht unbedingt der beste Ansatz