2010-10-14 2 views

Antwort

5

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