ANT任务根据输入调用另一个任务

时间:2015-09-30 16:36:33

标签: ant

我为自动部署编写了一个ant任务。

    <target name="deployWMBComponent">
    <for list="${esb.ci.WMB.deployment.target.brokers}" param="brokername" delimiter=" ">
        <sequential>               
            <for list="${esb.ci.WMB.deployment.target.egs}" param="egname" delimiter=" ">  
                <sequential>        
                    <exec executable="cmd.exe" failonerror="true" logerror="true" append="true" vmlauncher="false" dir="${esb.ci.WMB.dp.home}">
                        <arg value="/C" />
                        <arg value="mqsiprofile.cmd &amp;&amp; mqsideployscript.bat" />
                        <arg value="-n" />
                        <arg value="${brokerConfigFilePath}\@{brokername}.broker" />
                        <arg value="-e" />
                        <arg value="@{egname}" />
                        <arg value="-w" />
                        <arg value="600" />
                        <arg value="-a" />
                        <arg value="${barLocalPath}" />                                                         
                    </exec>
                </sequential>
            </for>
        </sequential>
    </for>      
</target>

所有属性都在属性文件中定义。我添加了一个新的布尔参数Default_Propagation,如果上面提到的TRUE脚本应该调用另一个ant任务,如果FALSE上面的脚本应该直接执行。

1 个答案:

答案 0 :(得分:0)

首先我会回答你的问题: 您需要(假设您使用的是蚂蚁&gt; 1.8)将ifunless添加到两个目标,并让一个依赖另一个目标。

<target name="deployWMBComponent" if="${default.propogation}" depends="other-thing">

添加新目标时

<target name="other-thing" unless="${default.propogation}">

一个工作示例:

<project name="foo" default="default-deploy">

  <target name="default-deploy" if="${default.propogation}" depends="other-deploy">
    <echo message="default" />
  </target>

  <target name="other-deploy" unless="${default.propogation}">
    <echo message="other" />
  </target>

</project>

使用:ant -Ddefault.propogation=FALSEant -Ddefault.propogation=TRUE

进行调用

请参阅if上的ant docsunless了解完整的纲要。 要考虑的另一件事,现在你有默认和另一件事。它可能会有第三个。那么布尔值是不够的。

说完了 - 你真的想做什么?非默认传播有何不同?是不同的服务器名称(属性)? 为什么不在运行构建时调用一个目标或另一个目标? 当你觉得你需要蚂蚁的条件和循环时,通常是一个非常好的迹象,你不应该做你在蚂蚁做的事情。