在同一个构建文件中调用另一个目标,可以选择性地指定一些属性(在此上下文中称为参数)。**此任务不能在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属性)。
指定在运行指定目标之前要设置的属性。有关用法指南,请参见property。
这些属性等同于您在命令行上定义的属性。这些是特殊的属性,它们将始终被传递下去,即使通过额外的<*ant*>
任务,并将inheritAll设置为false
(见上文)。
用于选择要复制到新项目的引用,可以选择性地更改它们的id。
属性 | 描述 | 必需 |
---|---|---|
refid | 调用项目中引用的id。 | 是 |
torefid | 新项目中引用的id。 | 否;默认为refid的值 |
自 Ant 1.6 起.
您可以使用propertyset指定要复制到新项目的一组属性。
自 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定义复制到新项目中。