【发布时间】:2011-04-25 09:23:47
【问题描述】:
我是 Ant 新手。 有人可以告诉我为 taskdef 的“classpathref”赋予什么价值吗? 它会是类文件的路径吗? 如果是,可以举个例子,因为我试过了,但它不适合我。
【问题讨论】:
我是 Ant 新手。 有人可以告诉我为 taskdef 的“classpathref”赋予什么价值吗? 它会是类文件的路径吗? 如果是,可以举个例子,因为我试过了,但它不适合我。
【问题讨论】:
在 taskdef 中,classpathref 应该是对先前定义的 path 的引用。
该路径应包含一个 jar 存档,其中包含实现任务的类,
或者它应该指向文件系统中的目录,该目录是类层次结构的 root。
如果您的类驻留在包中,这将不是保存您的类的实际目录。
这是一个例子。
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"/>
【讨论】: