Klasse mit Ant, Ivy und JUnit nicht gefunden - Fehler in build.xml?

Ich versuche ein einfaches (?) Testprojekt mit Ant, Ivy und JUnit zu bekommen. Die Grundidee ist, dass Ivy junit.jar herunterlädt und dann Ant es verwendet.

Beachten Sie, dassdas junitglas ist auf dem klassenweg weil sonst (ohne dieclasspath Ich sehe "Der <Klassenpfad> für <junit> muss junit.jar enthalten, wenn nicht in Ants eigenem Klassenpfad". Die unten angegebene Klasse (junit.framework.TestListener) befindet sich auch in junit-4.8.2.jar.

Wenn ich es jedoch versucheant test auf den folgenden sehe ich:

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

Ich vermute also, dass etwas mit meiner build.xml nicht stimmt? Was?

Hier ist die 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>

und die vorhandene Verzeichnisstruktur nach der Kompilierung:

.
├── 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

Aktualisieren Übrigens,ant -lib lib test (explizit das lib-Verzeichnis angeben) funktioniert. Und es gibt viele verwirrende Beschreibungen des Umgangs damit in zufälligen Websuchergebnissen - aber ich habe den Eindruck, dass der obige Ansatz mit dem übereinstimmtneueste Dokumente (Ich verwende Ameise 1.9) - siehe Punkt 5. Also denke ich, dass dies eine sein könnteFehler; Fehler.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage