Ant taskdef需要什么类路径?

Tes*_*ser 5 ant taskdef

我是Ant的新手.有人可以告诉我为taskdef的'classpathref'提供什么值?它会是类文件的路径吗?如果是,可以给出一个例子,因为我尝试了它并且它不适合我.

mar*_*ton 6

在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" );
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,包名是com.x.y.z,所以在部署时 - 假设这些类放在一个名为classes- 的目录下,我们可能会在文件系统中看到这个类:

$ ls classes/com/x/y/z
MyTask.class
Run Code Online (Sandbox Code Playgroud)

这是一个使用该任务的简单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>
Run Code Online (Sandbox Code Playgroud)

请注意目录中的classpathref给定点classes- 类层次结构的根.

运行时,我们得到:

$ ant
Buildfile: .../build.xml
   [mytask] MyTask is running
Run Code Online (Sandbox Code Playgroud)

你可以使用显式classpath而不是'classpathref' 来做类似的事情,例如:

<property name="my.classes" value="${basedir}/classes" />
<taskdef name="mytask" classpath="${my.classes}" classname="com.x.y.z.MyTask"/>
Run Code Online (Sandbox Code Playgroud)