2016-03-30 6 views
0

Ich habe folgendes ant Ziel:Ant JUnit-Task ausfällt, bevor der Test ausgeführt

<path id="test-classpath"> 
    <fileset dir="lib"> 
     <include name="*.jar" /> 
    </fileset> 
    <pathelement path="bin/release" /> 
</path> 

<target name="run-test"> 
    <junit printsummary="yes" haltonfailure="yes" fork="true"> 
     <formatter type="failure"/> 
     <test name="someNamespace.someTest" /> 
     <classpath refid="test-classpath" /> 
    </junit> 
</target> 

Wenn ich versuche, es von der Befehlszeile ausführen, ich die folgende Ausgabe bekommen:

>ant run-test 
Buildfile: ...\build.xml 
    [echo] 2016-03-30 20:29:29 

run-test: 
    [junit] Exception in thread "main" java.lang.reflect.InvocationTargetException 
    [junit]  at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:343) 
    [junit]  at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:257) 
    [junit]  at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.transferFormatters(JUnitTestRunner.java:1085) 
    [junit]  at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1180) 
    [junit]  at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:1033) 
    [junit] Caused by: java.lang.reflect.InvocationTargetException 
    [junit]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    [junit]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    [junit]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    [junit]  at java.lang.reflect.Method.invoke(Method.java:498) 
    [junit]  at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:337) 
    [junit]  ... 4 more 
    [junit] Caused by: java.lang.NullPointerException 
    [junit]  at org.apache.tools.ant.taskdefs.optional.junit.FailureRecorder.setProject(FailureRecorder.java:153) 
    [junit]  ... 9 more 

BUILD FAILED 
...\build.xml:171: Using loader AntClassLoader[ 
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant-launcher.jar; 
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant.jar; 
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant-junit.jar; 
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant-junit4.jar; 
    ...\lib\commons-math3-3.5.jar; 
    ...\lib\hamcrest-core-1.3.jar; 
    ...\lib\junit-4.11.jar; 
    ...\lib\log4j-api-2.5.jar; 
    ...\lib\log4j-core-2.5.jar; 
    ...\bin\release] on class org.apache.tools.ant.taskdefs.optional.junit.FailureRecorder: 
java.lang.NoClassDefFoundError: junit/framework/TestListener 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at org.apache.tools.ant.AntClassLoader.findBaseClass(AntClassLoader.java:1407) 
     at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1085) 
     at org.apache.tools.ant.util.SplitClassLoader.loadClass(SplitClassLoader.java:58) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:348) 
     at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:287) 
     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.logVmExit(JUnitTask.java:1854) 
     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.logVmCrash(JUnitTask.java:1818) 
     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked(JUnitTask.java:1295) 
     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:1024) 
     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:2105) 
     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:832) 
     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
     at org.apache.tools.ant.Task.perform(Task.java:348) 
     at org.apache.tools.ant.Target.execute(Target.java:435) 
     at org.apache.tools.ant.Target.performTasks(Target.java:456) 
     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405) 
     at org.apache.tools.ant.Project.executeTarget(Project.java:1376) 
     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
     at org.apache.tools.ant.Project.executeTargets(Project.java:1260) 
     at org.apache.tools.ant.Main.runBuild(Main.java:853) 
     at org.apache.tools.ant.Main.startAnt(Main.java:235) 
     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285) 
     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112) 
Caused by: java.lang.ClassNotFoundException: junit.framework.TestListener 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 51 more 

Total time: 3 seconds 

Der Test läuft erfolgreich in Eclipse Mars (4.5.2). Weiß jemand, warum das passieren würde und wie ich meinen JUnit-Test durch Ameisen laufen lassen kann? Ich benutze JUnit 4.11 und habe versucht, ant v1.9.3 und v1.9.6 (die obige Ausgabe wurde von ant v1.9.6 generiert).

EDIT

ich auch ant v1.8.4 getestet Verwendung gemäß den Empfehlungen in den Kommentaren, aber das hat keine Auswirkungen auf dem resultierenden Absturz (andere als die Versionsnummern der JAR-Dateien) .

+0

Mögliches Duplikat von [Klasse nicht gefunden mit Ant, Ivy und JUnit - Fehler in build.xml?] (Http://stackoverflow.com/questions/15979391/class-not-found-with-ant-ivy-and -junit-error-in-build-xml) – kryger

+0

@kryger Ich denke, die Antwort auf diese Frage ist die Kommentare der Frage, die Sie verknüpft haben, und ich denke nicht, dass es Klassen als Duplikat. – zode64

+0

@kryger Dieses Problem beantwortet meine Frage aus zwei Gründen nicht. Erstens zeigt die Frage an, dass das OP einen [Ameisenwanzen] geöffnet hat (https://bz.apache.org/bugzilla/show_bug.cgi?id=54835), aber dieser Fehler wurde in der Antwort 1.9.6 geschlossen. Ich habe in dieser Version getestet, und das Problem bleibt bestehen. Zweitens, selbst wenn ich versuche, ant 1.8.4 zu verwenden, wird genau die gleiche Stack-Trace (verschiedene Versionsnummern auf den JAR-Dateien) erzeugt. –

Antwort

0

Ich endlich herausgefunden, was das Problem war. Mein JUnit-Task-Klassenpfad war falsch, da ich vergessen habe, den Speicherort meiner Testsuite-Klasse anzugeben. Nachdem ich den Klassenpfad korrigiert hatte, funktionierte alles wie erwartet. Dennoch denke ich, dass dies ein Fehler ist, der entweder von den Ant- oder JUnit-Teams behoben werden sollte. Eine Nachricht wie "Klasse XXX konnte nicht geladen werden" wäre viel hilfreicher gewesen.

Verwandte Themen