验证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>

但我还有另一个属性,它为每个文件定义了各自的“包”。但是我如何并行使用第二个列表呢

  • 验证${packages}包含的元素数是否与${files}相同
  • 为使用文件列表中单个文件的目标名称任务提供${packages}的第n个元素
  • 或者,如果我无法验证包,请确保只提供一个文件参数

    属性是用户可配置的,将从属性文件中提供,因此我事先不知道它们


    听起来我对“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"/>