添加任务和类型

当插件添加 Ant 任务和类型时,这些任务和类型具有对添加插件内的所有类的访问权。例如,org.eclipse.core.resources 插件添加的 eclipse.refreshLocal 任务是 IResource.refreshLocal() 方法的包装器。

一定不能将插件添加的任务和类型放置在任何插件库中。它们必须在独立的 JAR 中。这表示插件类不具有对该插件提供的任务和类型的访问权。(请参阅为什么任务和类型需要单独的 JAR?以获取更多信息。)

org.eclipse.ant.core.antTasks 扩展点提供了如何在 plugin.xml 文件中指定新任务的示例。

进度监视器

如果在调用 AntRunner 时传送了进度监视器,Eclipse Ant 支持将提供对 IProgressMonitor 的访问权。具有对进度监视器的访问权的优点之一是长期运行的任务可以查看用户是否已请求取消该任务。进度监视器对象是从 Ant 项目的引用获取的。注意,仅当使用有效进度监视器调用方法 AntRunner.run(IProgressMonitor) 时,监视器才可用。以下代码段说明如何从任务的项目获取进度监视器:

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.eclipse.ant.core.AntCorePlugin;
import org.eclipse.core.runtime.IProgressMonitor;

public class CoolTask extends Task {

public void execute() throws BuildException {
IProgressMonitor monitor =
(IProgressMonitor) getProject().getReferences().get(AntCorePlugin.ECLIPSE_PROGRESS_MONITOR);
if (monitor == null) {
		...
         } else {
		...
	}
}
}

添加任务和类型时的重要规则

以下各项应充当插件开发者的核对表:

为什么任务和类型需要单独的 JAR?

要在并不完全符合插件模型的 Eclipse 中运行 Ant,有两个基本要求:

在运行时期间,无法扩展插件类装入器的类路径,并且插件不能更改它们的依赖项。同时,让任务和类型具有单独的 JAR 是与插件类装入机制的最佳隔离。具有插件声明这些额外的 JAR 还允许将插件添加项添加至 Ant 类路径。