如果任何环境与传递的参数环境匹配,我需要比较相关环境的列表并执行操作。 下面的代码比较每个时间的值。我不想为每个环境编写代码,因为我需要对一组环境执行相同的操作。
如何将所有环境(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>
答案 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
目标。
build
同时依赖于development
和test
,因此脚本将跳转至它们并检查其依赖性init
,后者没有依赖性,因此脚本将继续运行init
DEV
具有3个开发值之一,则将属性env
设置为true;如果TST
具有测试,则将env
设置为true值development
和test
目标,但仅在其各自条件为true时才运行其中一个旁注:如果您的env
值遵循可预测的模式(即DEV1-DEV70),则可以使用contains
条件来简化操作。
<condition property="DEV">
<contains string="${env}" substring="DEV" />
</condition>