Ant - 任务和目标之间的区别

时间:2014-04-19 20:32:42

标签: java ant build

我是Ant新手,很难理解tasktarget等基本内容。

在线文档和书籍说target是整个构建过程的一个阶段,而task是最小的工作。但是,我发现很难理解这究竟是什么意思,

有人可以通过示例深入解释Ant中targettask的内容吗?

2 个答案:

答案 0 :(得分:7)

目标包含一项或多项任务。

目标具有用户定义的名称,通常执行高级操作,如“编译代码”或“构建可部署的jar文件”。它只是一个方便的任务容器(并且还允许您指定其他目标的依赖关系)。

任务由Ant(或插件)提供并命名,通常是低级别的,如“复制文件”,“创建目录”。如果Ant manual无法满足您的需求,您可以创建新任务(请参阅built-in ones

来自Ant tutorial

的示例
<target name="compile">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes"/>
</target>

目标被称为“编译”(因为它旨在编译一些代码。但是,名称是任意的 - 我也可以称之为“doUsefulStuff”)。要完成此目标,我们指定要执行两个任务:

  1. 制作目录(使用mkdir任务)

  2. 编译一些代码,并使用javac任务

  3. 将编译后的类放入步骤1的目录中

    (免责声明 - 可能可以使用任务创建目标 - 我没有检查过 - 但它们没什么用处。)

答案 1 :(得分:1)

另一个根本区别在于,当您运行ant时,您指示要执行的目标(不是任务)。因此,当您通过命令行调用ant时,指定ant [options] [target]。如果您未指定目标,则会执行构建文件(build.xml)中指定为默认目标的目标。

如果在Eclipse中的ant视图上打开ant构建文件,则可执行选项是目标,而不是任务。

出于实际目的,目标进一步分为私人(aka,内部)和公共。不同之处在于公共目标的<target>声明包含description属性。我之所以提到这一点,是因为您可能希望在build.xml中的子步骤中分解/重构目标。子步骤可以是内部目标。