使用<macrodef>和exec </macrodef>的可变数量的参数

时间:2013-12-17 10:06:05

标签: ant

我正在使用 exec 从ant build.xml多次调用命令行程序。此命令行程序针对不同情况采用可变数量的参数。

目前我使用exec多次调用此外部程序,代码看起来很杂乱。例如:

<exec dir="./deploy_abc/bin" executable="python" failonerror="true" >
    <arg line="tests.py"/>
    <arg line="-h aaa"/>
    <arg line="-u bbb"/>
    <arg line="-p ccc"/>
</exec>

<exec dir="./deploy_abc/bin" executable="python" failonerror="true" >
    <arg line="tests.py"/>
    <arg line="-h ddd"/>
    <arg line="-u eee"/>
    <arg line="-p fff"/>
    <arg value="this is second test"/>
</exec>

<exec dir="./deploy_abc/bin" executable="python" failonerror="true" >
    <arg line="tests.py"/>
    <arg line="-u bbb"/>
    <arg line="-p ccc"/>
    <arg value="this is another test"/>
</exec>

所以我打算使用macrodef重构这个build.xml文件。

我的问题是如何将可变数量的参数传递给macrodef。如上所示,我需要根据场景将不同的参数传递给执行程序。

1 个答案:

答案 0 :(得分:8)

您可以使用macrodef element来支持此功能:

  

这用于指定新任务的嵌套元素。内容   任务实例的嵌套元素放在   标签名称的模板化任务。

例如,您可以像这样定义宏:

<macrodef name="call-exec">
   <attribute name="dir"/>
   <attribute name="executable"/>
   <attribute name="failonerror"/>
   <element name="arg-elements"/>
   <sequential>
      <exec dir="@{dir}" executable="@{executable}"
                       failonerror="@{failonerrer}" >
         <arg-elements />
      </exec>
   </sequential>
</macrodef>

并称之为:

<call-exec dir="./deploy_abc/bin" executable="python" failonerror="true" >
  <arg-elements>
    <arg line="tests.py"/>
    <arg line="-u bbb"/>
    <arg line="-p ccc"/>
    <arg value="this is another test"/>
  </arg-elements>
</call-exec>