簡體   English   中英

蟻巢條件

[英]Ant nested condition

我有一個ant 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'
  }      
}

我的ant版本是1.10.3

在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>

您可以使用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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM