在 ant 中定义一个变量列表,可以在 for 循环中使用

Define a list of variables in ant, that can be used in a for-loop

我正在为一个有几个依赖项的项目编写一个 ant 构建文件。我需要编写一个单独的文件,其中包含所有项目共有的目标,然后将特定于项目的内容写入他们自己的构建文件中。例如,我有一个名为 "cleanDependencies".

的目标
<target name="cleanDependencies">
    <echo>Cleaning dependencies... </echo>
    <for list="dep1,dep2" param="dependency">
          <sequential>
                <ant dir="dep/@{dependency}" target="clean" inheritAll="false" />
          </sequential>
    </for>      
</target>

这是我所有项目的公共目标,我想将它分成一个公共目标文件;类似

的东西
<target name="cleanDependencies">
    <echo>Cleaning dependencies... </echo>
    <for list="${listOfDependencies}" param="dependency">
          <sequential>
                <ant dir="dep/@{dependency}" target="clean" inheritAll="false" />
          </sequential>
    </for>      
</target>

然后,我可以在项目的构建文件中定义一个名为 "listOfDependencies" 的列表,并且我可以按照这些行从不同的文件中包含公共目标 "cleanDependencies"。

<list name="listOfDependencies"> <!-- Not a valid tag in Ant -->
    <item>dep1</item>
    <item>dep2</item>
</list>

我的问题是:

1) 有没有办法在 ant 中定义变量列表?这个问题与另一个问题 (Define a list or a set of variables in ant) 相同,但答案没有给出在 for 循环之外定义列表的方法。

2) 是否有其他方法可以实现此目的?即一种在单独的文件中收集通用目标然后将其包含在具有适当变量的特定于项目的构建文件中的方法。

Ant 中没有 list 元素或任务。您可以使用包含依赖项的 属性 作为 comma-separated。公共目标已经依赖于 listOfDependencies 属性,因此您需要做的就是从调用目标传递它。应该很简单:

<!-- calling buildfile -->
<property name="listOfDependencies" value="dep1,dep2" />
<ant antfile="common/build.xml" target="cleanDependencies" />

子项目默认继承父项目的所有属性(这可以使用 inheritAll 属性控制)。

至于替代方案,请查看 import 任务,该任务可用于包含公共构建文件并调用它,就好像其目标已在主构建文件中定义一样。