Ant构建脚本-如果条件检查具有多个值

时间:2019-01-24 15:43:32

标签: xml build ant

如果任何环境与传递的参数环境匹配,我需要比较相关环境的列表并执行操作。 下面的代码比较每个时间的值。我不想为每个环境编写代码,因为我需要对一组环境执行相同的操作。

如何将所有环境(DEV1,DEV2,DEV3)一起比较?

<if>
<equals arg1=“${env}” arg2="DEV" /> <!-- Need to compare with DEV1, DEV2, DEV3 -->
<then>
    <echo>Dev related env </echo> 
</then>
<elseif>
    <equals arg1="${env}" arg2=“TST” /> <!-- Need to compare with TST, E2E, UAT -->
    <then>
        <echo>Test related env </echo> 
    </then>
</elseif>

1 个答案:

答案 0 :(得分:4)

首先,我强烈建议尽可能避免使用ant-contrib(提供if / else块,for循环等的第三方库)。最好使用目标级别的条件和Ant固有的依赖项来完成这种事情。这是一个如何完成此操作的示例。

<target name="build" depends="development,test" />

<target name="init">
    <condition property="DEV">
        <or>
            <equals arg1="${env}" arg2="DEV1" />
            <equals arg1="${env}" arg2="DEV2" />
            <equals arg1="${env}" arg2="DEV3" />
        </or>
    </condition>

    <condition property="TST">
        <or>
            <equals arg1="${env}" arg2="TST" />
            <equals arg1="${env}" arg2="E2E" />
            <equals arg1="${env}" arg2="UAT" />
        </or>
    </condition>
</target>

<target name="development" depends="init" if="DEV">
    <echo message="Dev related env" />
</target>

<target name="test" depends="init" if="TST">
    <echo message="Dev related env" />
</target>

使用上述构建脚本,用户只需调用build目标。

  1. build同时依赖于developmenttest,因此脚本将跳转至它们并检查其依赖性
  2. 它们都依赖于init,后者没有依赖性,因此脚本将继续运行init
  3. 如果属性DEV具有3个开发值之一,则将属性env设置为true;如果TST具有测试,则将env设置为true值
  4. 该脚本返回到developmenttest目标,但仅在其各自条件为true时才运行其中一个

旁注:如果您的env值遵循可预测的模式(即DEV1-DEV70),则可以使用contains条件来简化操作。

    <condition property="DEV">
        <contains string="${env}" substring="DEV" />
    </condition>