0

I have the following ant target:

<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>

When I try to run it from the command-line, I am getting the following output:

>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

The test runs successfully within Eclipse Mars (4.5.2). Does anyone know why this would be happening, and how I can get my JUnit test to run through ant? I am using JUnit 4.11, and have tried ant v1.9.3 and v1.9.6 (the above output was generated from ant v1.9.6).

EDIT

I also tested using ant v1.8.4, per the recommendations in the comments, but that doesn't have any effect on the resulting crash (other than the version numbers of the jar files).

Jeff G
  • 4,470
  • 2
  • 41
  • 76
  • Possible duplicate of [Class not found with Ant, Ivy and JUnit - error in build.xml?](http://stackoverflow.com/questions/15979391/class-not-found-with-ant-ivy-and-junit-error-in-build-xml) – kryger Mar 30 '16 at 21:10
  • @kryger I think the answer to this question is the comments of the question you linked to and so I don't think it classes as a duplicate. – rogermushroom Mar 30 '16 at 21:33
  • @kryger That issue doesn't answer my question for two reasons. First, the question indicates the OP opened an [ant bug](https://bz.apache.org/bugzilla/show_bug.cgi?id=54835), but that bug was closed in ant 1.9.6. I tested in that version, and the issue remains. Second, even when I try to use ant 1.8.4, this exact same stack-trace (different version numbers on the jar files) is produced. – Jeff G Mar 31 '16 at 00:33

2 Answers2

0

According to this question - Class not found with Ant, Ivy and JUnit - error in build.xml? - there is a bug in ant 1.9+ and you should try ant 1.8.4.

rogermushroom
  • 5,486
  • 4
  • 42
  • 68
  • Unfortunately, I am getting the same exception and stack trace (with different jar version numbers) when I try to use ant 1.8.4. – Jeff G Mar 31 '16 at 00:36
0

I finally figured out what the problem was. My JUnit task classpath was incorrect, as I forgot to include the location of my test suite class. Once I corrected the classpath, everything worked as expected. Still, I feel that this is a bug that should be addressed by either the Ant or JUnit teams. A message such as, "Class XXX could not be loaded" would have been much more helpful.

Jeff G
  • 4,470
  • 2
  • 41
  • 76