6

我是蚂蚁的新手。有人可以告诉我为 taskdef 的“classpathref”赋予什么价值吗?它会是类文件的路径吗?如果是,可以举一个例子,因为我试过了,但它不适合我。

4

1 回答 1

8

在 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而不是“类路径引用”来执行类似操作,例如:

<property name="my.classes" value="${basedir}/classes" />
<taskdef name="mytask" classpath="${my.classes}" classname="com.x.y.z.MyTask"/>
于 2010-10-14T14:48:44.650 回答