我有一个蚂蚁build.xml
文件,其中包含以下代码段:
<condition property="apiUrl" value="apiUrl1">
<and>
<equals arg1="${area}" arg2="area1"/>
<equals arg1="${env}" arg2="stage"/>
</and>
</condition>
<condition property="apiUrl" value="apiUrl2">
<and>
<equals arg1="${area}" arg2="area1"/>
<equals arg1="${env}" arg2="develop"/>
</and>
</condition>
从上面可以看到,<equals arg1="${area}" arg2="area1"/>
被检查了两次,代码段的逻辑等效于伪代码:
if (${area} == 'area1' and ${env} == 'stage') {
apiUrl = 'apiUrl1'
}
if (${area} == 'area1' and ${env} == 'develop') {
apiUrl = 'apiUrl2'
}
如何更改build.xml
,使其逻辑变为以下嵌套条件?
if (${area} == 'area1') {
if (${env} == 'stage') {
apiUrl = 'apiUrl1'
}
if (${env} == 'develop') {
apiUrl = 'apiUrl2'
}
}
我的蚂蚁版本是1.10.3
。
答案 0 :(得分:1)
在Ant中,这种看似微小的变化看起来如此尴尬的原因是,虽然仅通过condition
任务控制属性的条件设置,但逻辑的条件流却被控制在target
级别。因此,如果您要根据条件运行或跳过某些步骤,则必须创建一个单独的目标,该目标首先检查条件,然后告诉您的主要目标是否应运行。
<target name="setApiUrl" depends="checkArea" if="isArea1">
<condition property="apiUrl" value="apiUrl1">
<equals arg1="${env}" arg2="stage"/>
</condition>
<condition property="apiUrl" value="apiUrl2">
<equals arg1="${env}" arg2="develop"/>
</condition>
</target>
<target name="checkArea">
<condition property="isArea1">
<equals arg1="${area}" arg2="area1"/>
</condition>
</target>
答案 1 :(得分:0)
您可以使用script
代替condition
这样的任务来实现:
<project default="init" name="My Project">
<property name="area" value="area1" />
<property name="env" value="develop" />
<target name="init">
<script language="javascript">
if (project.getProperty('area') == 'area1') {
if (project.getProperty('env') == 'stage') {
project.setProperty('apiUrl', 'apiUrl1');
}
if (project.getProperty('env') == 'develop') {
project.setProperty('apiUrl', 'apiUrl2');
}
}
</script>
<echo>${apiUrl}</echo>
</target>
</project>