2015-09-30 55 views
0

我为自动部署编写了一个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> 

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

+0

有人可以帮助上述要求?任何帮助将不胜感激! – user3171821

回答

0

首先我会回答你的问题: 你会想(假设你使用蚂蚁> 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

ant docsifunless为AC完整的破败。 要思考的另一件事,现在你有默认和其他的事情。很可能会有第三个。那么一个布尔值就不够了。

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

+0

感谢您的输入!要清楚的是,如果default.propagation属性= true,我希望deployWMBComponent调用另一个目标,然后执行deployWMBComponent,如果default.propagation = false,我只想执行deployWMBComponent。希望你现在清楚。 – user3171821