我正在为一个有几个依赖项的项目编写一个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"的列表,并且我可以包括来自不同文件的公共目标"cleanDependencie",沿着这些行。
<list name="listOfDependencies"> <!-- Not a valid tag in Ant -->
<item>dep1</item>
<item>dep2</item>
</list>
我的问题是:
1) 有没有一种方法可以定义ant中的变量列表?这个问题与另一个问题(在ant中定义一个列表或一组变量)相同,但答案并没有给出在for循环之外定义列表的方法。
2) 有没有其他方法可以实现这一点?即在单独的文件中收集公共目标,然后将其包含在具有适当变量的项目特定构建文件中。
list
元素或任务。可以使用包含以逗号分隔的依赖项的属性。公共目标已经依赖于listOfDependencies
属性,所以您所需要做的就是从调用目标传递该属性。应该简单到:
<!-- calling buildfile -->
<property name="listOfDependencies" value="dep1,dep2" />
<ant antfile="common/build.xml" target="cleanDependencies" />
默认情况下,子项目继承父项目的所有属性(这可以使用inheritAll
属性进行控制)。
至于替代方案,请查看import
任务,该任务可用于包含公共构建文件,并将其调用为在主构建文件中定义其目标。