Ich bin neu in Ant. Kann mir bitte jemand sagen, welchen Wert man für 'classpathref' für Taskdef verwenden soll? Wird es der Pfad der Klassendatei sein? Wenn ja kann ein Beispiel gegeben werden, weil ich das probiert habe und es nicht für mich funktioniert.Welchen Klassenpfad benötige ich für einen Ant Taskdef?
Antwort
In der Taskdefinition sollte der classpathref
eine Referenz zu einem zuvor definierten path
sein. Der Pfad sollte ein jar-Archiv enthalten, das die Klasse enthält, die den Task implementiert, , oder es sollte auf das Verzeichnis im Dateisystem verweisen, das root der Klassenhierarchie ist. Dies wäre nicht das eigentliche Verzeichnis, in dem sich Ihre Klasse befindet, wenn sich Ihre Klasse in einem Paket befindet.
Hier ist ein Beispiel.
MyTask.java:
package com.x.y.z;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
public class MyTask extends Task
{
// The method executing the task
public void execute() throws BuildException {
System.out.println("MyTask is running");
}
}
Beachten Sie, dass der Paketname com.x.y.z
ist, so dass, wenn im Einsatz - kann sagen, dass die Klassen unter einem Verzeichnis classes
genannt gestellt werden - könnten wir die Klasse hier im Dateisystem sehen :
$ ls classes/com/x/y/z
MyTask.class
Hier ist eine einfache build.xml, die die Aufgabe verwendet:
<project name="MyProject" basedir=".">
<path id="my.classes">
<pathelement path="${basedir}/classes" />
</path>
<taskdef name="mytask" classpathref="my.classes" classname="com.x.y.z.MyTask"/>
<mytask />
</project>
Beachten Sie, dass die classpathref
angegebenen Punkte im Verzeichnis classes
- der Stamm der Klassenhierarchie.
Wenn er gestartet wird, erhalten wir:
$ ant
Buildfile: .../build.xml
[mytask] MyTask is running
Sie können eine explizites classpath
ähnlich tun, anstatt ein 'classpathref', zum Beispiel:
<property name="my.classes" value="${basedir}/classes" />
<taskdef name="mytask" classpath="${my.classes}" classname="com.x.y.z.MyTask"/>