验证Ant脚本中的两个列表属性是否具有相同数量的元素(并并行使用它们)
我有一个属性,它定义了一个文件列表,并使用验证Ant脚本中的两个列表属性是否具有相同数量的元素(并并行使用它们),ant,Ant,我有一个属性,它定义了一个文件列表,并使用 <foreach target="target-name" param="file" parallel="true" trim="true"> <path> <filelist dir="${dir}" files="${files}" /> </path> </foreach> 但我还有另一个属性,
<foreach target="target-name" param="file"
parallel="true" trim="true">
<path>
<filelist dir="${dir}" files="${files}" />
</path>
</foreach>
但我还有另一个属性,它为每个文件定义了各自的“包”。但是我如何并行使用第二个列表呢
听起来我对“ant”的功能有些过分,但这是一个现有的脚本,我需要修改它,以确保它不能用两个文件和一个包运行。如果没有别的,我只需要检测这种情况 为了验证${packages}包含与${files}相同数量的元素,您可以在-
${packages}
和${files}
上使用
,以计算、
或任何其他分隔符的数量,并比较这些值,以确保文件
和包
中的元素数量相同。当计数相同时,您可以运行
看
在的第i次迭代中,分别获得${files}
和${packages}
的第i个元素
(假设${packages}
中的顺序与${files}
中的顺序一致)似乎并不简单。主要是因为
只包含一个参数
属性,因此根据指定的分隔符
只传输输入列表
的一个当前元素。
解决方法可能是在一个列表上使用
,例如${files}
,并在目标名称中使用另一个列表,即${packages}
(通过为
的每次迭代从列表中提取一个元素)
如何实现这一点取决于您。一个示例:(在目标名称中)
在每次迭代
和随后调用目标名称时,${packages}
的第一个元素将在${curr\u pkg}
中可用,并且它也将从{$packages}
中删除(如果不想修改${packages}
,请使用替代属性)请参阅:我们决定在此时只执行检查,使用task而不是CountFilter,因为它不需要额外的任务库。谢谢你的想法!
<propertyregex property="curr_pkg" input="${packages}" regexp="^(.*?)," select="\1" />
<propertyregex property="${packages}" input="${packages}" regexp="^.*?," replace="" override="true"/>