2010-10-14 8 views

Odpowiedz

5

W Taskdef, classpathref powinno być odniesieniem do wcześniej zdefiniowanego path. Ścieżka powinna zawierać archiwum słoików, w którym znajduje się klasa realizująca zadanie, lub powinna wskazywać na katalog w systemie plików, który jest root hierarchii klasowej. To nie będzie rzeczywisty katalog, który przechowuje twoją klasę, jeśli twoja klasa znajduje się w pakiecie.

Oto przykład.

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"); 
    } 
} 

Należy pamiętać, że nazwa pakietu jest com.x.y.z, więc po wdrożeniu - powiedzmy klasy są wprowadzane na podstawie katalogu o nazwie classes - możemy zobaczyć klasę tutaj w systemie plików :

$ ls classes/com/x/y/z 
MyTask.class 

Oto prosty build.xml, który używa zadanie:

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

Należy zauważyć, że classpathref podanych punktów w katalogu classes - root hierarchii klas.

Po uruchomieniu otrzymujemy:

$ ant 
Buildfile: .../build.xml 
    [mytask] MyTask is running 

Można to zrobić za pomocą podobny wyraźny classpath, raczej niż 'classpathref', na przykład:

<property name="my.classes" value="${basedir}/classes" /> 
<taskdef name="mytask" classpath="${my.classes}" classname="com.x.y.z.MyTask"/> 
Powiązane problemy