AntCall

描述

在同一个构建文件中调用另一个目标,可以选择性地指定一些属性(在此上下文中称为参数)。**此任务不能在target之外使用。**

默认情况下,当前项目的所有属性都将在新项目中可用。或者,您可以将inheritAll属性设置为false,并且只有“用户”属性(即在命令行上传递的属性)将传递给新项目。无论哪种情况,传递给新项目的属性集都将覆盖在新项目中设置的属性(另请参见property任务)。

您还可以使用嵌套的<param>标签从旧项目中设置新项目中的属性。这些属性始终传递给新项目,以及在该项目中创建的任何项目,无论inheritAll的设置如何。这允许您参数化子项目。命令行上定义的属性不能被嵌套的<param>元素覆盖。

当多个嵌套的<param>元素设置相同名称的属性时,最后声明的元素将获胜。这是为了向后兼容,即使它与构建文件中<property>任务的行为不同。

嵌套的<reference>元素可用于将引用从调用项目复制到新项目,可以选择性地使用不同的id。从嵌套元素获取的引用将覆盖在新项目中目标外部定义的现有引用,但不会覆盖目标内部定义的引用。

当目标被antcall调用时,它所有的依赖目标也会在任何新参数的上下文中被调用。例如,如果目标doSomethingElse依赖于目标init,那么antcall doSomethingElse将在调用期间调用init。当然,在antcall任务中定义的任何属性或从调用目标继承的属性都将被固定,并且不能在init目标中覆盖,也不能在doSomethingElse目标中覆盖。

被调用的目标在新的项目中运行;请注意,这意味着被调用目标设置的属性、引用等不会持久化回调用项目。

如果构建文件在您启动构建后发生更改,则此任务的行为是未定义的。

参数

属性 描述 必需
target 要执行的目标。
inheritAll 如果为true,则将所有属性传递给新的 Apache Ant 项目。 否;默认为true
inheritRefs 如果为true,则将所有引用传递给新的 Ant 项目。 否;默认为false

关于inheritRefs的说明

<antcall>不会覆盖现有的引用,即使您将inheritRefs设置为 true。由于被调用的构建文件与调用文件相同,这意味着它不会覆盖通过id属性设置的任何引用。子项目可以继承的唯一引用是通过嵌套的<reference>元素定义的引用,或者由任务直接定义的引用(不使用id属性)。

作为嵌套元素指定的参数

param

指定在运行指定目标之前要设置的属性。有关用法指南,请参见property
这些属性等同于您在命令行上定义的属性。这些是特殊的属性,它们将始终被传递下去,即使通过额外的<*ant*>任务,并将inheritAll设置为false(见上文)。

reference

用于选择要复制到新项目的引用,可以选择性地更改它们的id

属性 描述 必需
refid 调用项目中引用的id
torefid 新项目中引用的id 否;默认为refid的值

propertyset

自 Ant 1.6 起.

您可以使用propertyset指定要复制到新项目的一组属性。

target

自 Ant 1.6.3 起.

您可以使用嵌套的<target>元素指定多个目标,而不是使用target属性。这些将被执行,就好像 Ant 被调用了一个目标,该目标的依赖项是如此指定的目标,并且按指定的顺序执行。

属性 描述 必需
name 被调用目标的名称。

示例

以下

<target name="default">
  <antcall target="doSomethingElse">
    <param name="param1" value="value"/>
  </antcall>
</target>

<target name="doSomethingElse">
  <echo message="param1=${param1}"/>
</target>

将运行目标doSomethingElse并回显param1=value,而

<antcall ... >
  <reference refid="path1" torefid="path2"/>
</antcall>

将使用id path2将父级的path1定义复制到新项目中。