我正在使用 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。如上所示,我需要根据场景将不同的参数传递给执行程序。
答案 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>