我正在为具有几个依赖项的项目编写一个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)是否有其他方法可以实现这一目标?即一种在单独文件中收集公共目标的方法,然后将其包含在具有适当变量的项目特定构建文件中。
答案 0 :(得分:1)
Ant中没有list
个元素或任务。您可以使用包含依赖项的属性作为逗号分隔。公共目标已经依赖于listOfDependencies
属性,因此您需要做的就是从调用目标传递该属性。应该如此简单:
<!-- calling buildfile -->
<property name="listOfDependencies" value="dep1,dep2" />
<ant antfile="common/build.xml" target="cleanDependencies" />
默认情况下,子项目从父项目继承所有属性(可以使用inheritAll
属性控制)。
至于替代方案,请查看import
任务,该任务可用于包含公共构建文件,并将其称为主目标是在主构建文件中定义的。