2010-10-14 147 views
5

我是Ant新手。 有人可以告訴我爲taskdef放置'classpathref'有什麼價值嗎? 它會成爲類文件的路徑嗎? 如果是的話,可以給出一個例子,因爲我試過了,它不適合我。Ant taskdef需要什麼類路徑?

回答

5

在taskdef中,classpathref應該是對之前定義的path的引用。 該路徑應該包含一個包含實現該任務的類的jar文件, 或者它應該指向文件系統中的目錄,即類層次結構的根目錄。 如果你的課程在一個包中,這將不是保存你的課程的實際目錄。

下面是一個例子。

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

注意,包名是com.x.y.z,所以在部署時 - 讓說的類名爲classes目錄下把 - 我們可以看到這裏的類文件系統:

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

這是一個使用任務的簡單build.xml文件:

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

請注意,classpathref給出了classes目錄處的點 - 類層次結構的根目錄。

運行時,我們得到:

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

你可以使用一個明確的classpath,而不是一個 'classpathref' 類似,例如:

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