我有一个定义文件列表的属性,并使用
进行浏览 <foreach target="target-name" param="file"
parallel="true" trim="true">
<path>
<filelist dir="${dir}" files="${files}" />
</path>
</foreach>
但我还有另一个属性,它为每个文件定义了一个相应的“包”。但是如何并行使用第二个列表?
或者只是确保只提供一个文件参数,如果我无法验证包。
属性是用户可配置的,将从属性文件中提供,因此我事先并不知道。
这听起来我超越了'ant'的功能,但这是一个现有的脚本,我需要修改它至少确保它不能用两个文件和一个包运行。如果不出意外,我只需要发现那种情况。
答案 0 :(得分:1)
为了verify that the ${packages} contains the same number of elements as ${files}
您可以{ - 1}}同时使用<countfilter>
和${packages}
来计算${files}
或任何其他{{1}的数量并比较这些值以确保,
和delimiter
中的元素的数量相同。当计数相同时,您可以运行files
。
请参阅CountFilter
分别在packages
中获取<foreach>
ith iteration of <foreach>
和ith elements
(假设${files}
中的顺序符合{{1}中的顺序}})似乎并不简单。主要是因为${packages}
包含只有一个 ${packages}
属性,因此${files}
只传输<foreach>
的一个当前元素 1}}指定。
可以使用param
在一个列表中使用the_input_list
,并在delimiter
中使用另一个列表,即<foreach>
(通过从列表中提取一个元素,每次迭代${files}
)。
如何实现这一点取决于您。一个例子:(在${packages}
)
target-name
在<foreach>
的每次迭代中以及随后target-name
<propertyregex property="curr_pkg" input="${packages}" regexp="^(.*?)," select="\1" />
<propertyregex property="${packages}" input="${packages}" regexp="^.*?," replace="" override="true"/>
的{{1}}的 <foreach>
的将在target-name
中提供,它也将在${packages}
中提供从${curr_pkg}
移除(或者如果您不想修改{$packages}
,请使用替代属性)