¿Clase no encontrada con Ant, Ivy y JUnit - error en build.xml?

Estoy tratando de obtener un proyecto de prueba simple (?) Trabajando con Ant, Ivy y JUnit. La idea básica es que Ivy descargará junit.jar y luego Ant lo usará.

Tenga en cuenta queel junit jar está en el classpath porque de lo contrario (sin elclasspath elemento en la tarea junit) Veo "<classpath> para <junit> debe incluir junit.jar si no está en la propia classpath de Ant". Además, la clase dada a continuación (junit.framework.TestListener) está en junit-4.8.2.jar.

Sin embargo, cuando lo intentoant test en lo siguiente veo:

test:

BUILD FAILED
/home/andrew/project/guice/hg/build.xml:33: java.lang.NoClassDefFoundError: junit/framework/TestListener
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
...
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.lang.ClassNotFoundException: junit.framework.TestListener
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
...

Entonces, ¿supongo que algo está mal con mi build.xml? ¿Qué?

Aquí está el build.xml:

<project xmlns:ivy="antlib:org.apache.ivy.ant" 
         name="java-example" default="dist" basedir=".">

  <description>
    simple example build file
  </description>

  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist" location="dist"/>
  <property name="lib" location="lib"/>

  <path id="lib.path">
    <fileset dir="${lib}"/>
  </path>

  <target name="init">
    <tstamp/>
    <mkdir dir="${build}"/>
  </target>

  <target name="compile" depends="init,resolve"
          description="compile the source">
    <javac srcdir="${src}" destdir="${build}" classpathref="lib.path"
           includeantruntime="false">
      <compilerarg value="-Xlint"/>
    </javac>
  </target>

  <target name="test" depends="compile"
          description="run the tests">
    <junit>
      <classpath refid="lib.path"/>
      <batchtest>
        <fileset dir="${build}">
          <include name="**/*Test.class"/>
        </fileset>
      </batchtest>
    </junit>
  </target>

  <target name="dist" depends="compile"
          description="generate the distribution">
    <mkdir dir="${dist}/lib"/>
    <jar jarfile="${dist}/lib/example-${DSTAMP}.jar" basedir="${build}"/>
  </target>

  <target name="clean"
          description="clean up">
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>

  <target name="resolve"
          description="download required dependencies">
    <ivy:retrieve/>
  </target>

</project>

y la estructura de directorios existente después de la compilación:

.
├── build
│   └── com
│       └── isti
│           └── example
│               ├── AppendToList.class
│               ├── DumpToStdout.class
│               ├── LimitedCounter.class
│               ├── MessageSink.class
│               ├── MessageSource.class
│               └── SinkToSourceTest.class
├── build.xml
├── dist
│   └── lib
│       └── example-20130412.jar
├── ivy.xml
├── lib
│   ├── junit-4.8.2.jar
│   ├── junit-4.8.2-javadoc.jar
│   └── junit-4.8.2-sources.jar
├── README.md
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── isti
    │               └── example
    │                   ├── AppendToList.java
    │                   ├── DumpToStdout.java
    │                   ├── LimitedCounter.java
    │                   ├── MessageSink.java
    │                   └── MessageSource.java
    └── test
        └── java
            └── com
                └── isti
                    └── example
                        └── SinkToSourceTest.java

Actualizar De paso,ant -lib lib test (dando explícitamente el directorio lib) funciona. Y hay muchas descripciones confusas del manejo de esto en los resultados aleatorios de búsqueda en la web, pero mi impresión es que el enfoque anterior es consistente con elúltimos documentos (Estoy usando ant 1.9) - vea el punto 5. Así que estoy pensando que esto puede ser uninsecto; insecto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta