我是 Ant 的新手。
有人可以告诉我taskdef的“classpathref”值是多少吗?
它是类文件的路径吗?
如果可以,可以举一个例子,因为我尝试了它,但对我却不起作用。

最佳答案

在taskdef中,classpathref应该是对先前定义的path的引用。
该路径应包含一个jar归档文件,其中包含实现该任务的类,
否则,它应指向文件系统中作为类层次结构根目录的目录。
如果您的类(class)位于包中,则该目录不是保存您的类(class)的实际目录。

这是一个例子。

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

09-06 11:08