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

时间:2017-02-10 18:37:04

标签: java for-loop ant

我正在为具有几个依赖项的项目编写一个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)是否有其他方法可以实现这一目标?即一种在单独文件中收集公共目标的方法,然后将其包含在具有适当变量的项目特定构建文件中。

1 个答案:

答案 0 :(得分:1)

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

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

默认情况下,子项目从父项目继承所有属性(可以使用inheritAll属性控制)。

至于替代方案,请查看import任务,该任务可用于包含公共构建文件,并将其称为主目标是在主构建文件中定义的。