我在不同的目录中有一堆子项目。我想将它们指定为一个列表,然后对于给定的目标,我想逐一检查每个目标并调用 subant。
我有这样的东西:
<target name="run">
<subant target="run" failonerror="true" verbose="true">
<fileset dir="${projectA}" includes="build.xml"/>
</subant>
<subant target="run" failonerror="true" verbose="true">
<fileset dir="${projectB}" includes="build.xml"/>
</subant>
</target>
但我必须为每个项目和每个目标集指定一个单独的子项行。我想要做的就是创建一个属性,它是一个子项目列表,并以某种方式使用它。它应该很简单,但是......
最佳答案
您可以定义一个宏来执行此操作:
<macrodef name="iterate-projects">
<attribute name="target" />
<sequential>
<subant target="@{target}">
<filelist dir="${src_dir}">
<file name="projectA/build.xml"/>
<file name="projectB/build.xml"/>
<file name="projectC/build.xml"/>
</filelist>
</subant>
</sequential>
</macrodef>
然后从另一个任意任务,您可以按顺序调用所有构建的目标,例如:
<target name="clean" description="Clean all projects">
<iterate-projects target="clean"/>
</target>
关于list - 如何将目标应用于 Ant 中的项目子列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774623/