我正在尝试更新ant脚本,我希望在 outputproperty 和 exec 任务中获得新输出。下面是我的蚂蚁脚本。
<target name="print_process_list">
<echo message="print_process_list start"/>
<echo message="${compile_project_lists} "/>
<echo message="print_process_list end"/>
</target>
<target name="buildall" depends="print_process_list">
<ac:for list="${compile_project_lists}" param="iprocess">
<sequential>
<exec executable="./ant_xml_pars.sh" outputproperty="ant_parstout" failonerror="false" >
<arg value="@{iprocess}"/>
</exec>
<echo message="${ant_parstout} " />
</sequential>
</ac:for>
ant_xml_pars.sh 根据列表中传递的 iprocess 提供输出。 ant_parstout 获取第一次迭代输出。但是它的值不会因循环中的后续迭代而改变。 我的要求是根据作为参数传递的进程获取 ant_parstout 中的输出。 我尝试了 macrodef ,但没有成功。
答案 0 :(得分:0)
我建议您阅读ant-contrib文档并使用variable任务而不是ANT属性。
ANT不是一种编程语言,因为ANT中的属性为immutable。为了解决这些限制,一些人使用ant-contrib扩展名来ANT,添加“for”之类的任务。我个人赞成在ANT中嵌入脚本,而不是尝试用XML编写循环...
示例嵌入式groovy脚本:
答案 1 :(得分:0)
这篇文章有点老了,但是我只是遇到了同样的问题,所以这就是我所做的:
<target name="print_process_list">
<echo message="print_process_list start"/>
<echo message="${compile_project_lists} "/>
<echo message="print_process_list end"/>
</target>
<target name="buildall" depends="print_process_list">
<ac:for list="${compile_project_lists}" param="iprocess">
<sequential>
<exec executable="./ant_xml_pars.sh" outputproperty="ant_parstout.@{iprocess}" failonerror="false" >
<arg value="@{iprocess}"/>
</exec>
<echo message="${ant_parstout.@{iprocess}} " />
</sequential>
</ac:for>