2011-06-15 78 views
1

我想檢查ant構建腳本的參數是否設置。我嘗試了很多方法來做到這一點,但沒有成功。我用-Dmaindir="../propertyfolderpath"定義了參數。參數不爲空

這是我試過的代碼示例;

<ac:if> 
    <equals arg1="@{maindir}" arg2="" /> 
    <ac:then> 
     <echo message="maindir argument is empty. Current properties will be used." /> 
     <property file="build.properties" /> 
    </ac:then> 
    <ac:else> 
     <echo message="maindir = ${maindir}" /> 
     <ac:if> 
      <ac:available file="${maindir}/build.properties" type="file" /> 
      <ac:then> 
       <property file="${maindir}/build.properties" /> 
      </ac:then> 
      <ac:else> 
       <fail message="${maindir} is not a valid path." /> 
      </ac:else> 
     </ac:if> 
    </ac:else> 
</ac:if> 
  • 有三種情況;
    1. 參數可能未定義。螞蟻應該先進入
    2. 參數定義的很好。用錯誤的道路

對於第二種情況腳本定義

  • 論證工作。 對於第三種情況,腳本正在工作。 但是對於第一種情況,我的意思是當我不定義maindir參數時,螞蟻像第三種情況那樣行事。這是我的問題。

    爲什麼螞蟻會這樣做?

  • 回答

    3

    也許你可以嘗試設置參數的默認值?

    <condition property="maindir" value="[default]"> 
        <not> 
         <isset property="maindir"/> 
        </not> 
    </condition> 
    <echo message="${maindir}" /> 
    

    我想這和它的作品,在沒有參數傳遞的${maindir}[default]

    +1

    我建議'[默認]'會變成'$ {basedir}' – 2011-06-15 10:13:50

    +0

    thx。這也適用於我。 Laepdjek和你的答案都是正確的。我用了兩個答案。謝謝。而且Arne你是對的。我已經像'$ {basedir}'一樣使用它了。 – Aykut 2011-06-15 10:39:40

    1

    它看起來像有兩個問題:

    1. 在第一個等於條件,如果,你有@{maindir}。除非它是一個宏的參數,否則它應該是${maindir},與您示例的其餘部分相同
    2. 如果尚未設置屬性,則不會評估任何屬性。因此,如果未定義主題,${maindir}將評估爲${maindir},而不是空字符串。

    解決這個最簡單的方法是@符號更改爲$符號,並在開始添加語句屬性默認值:

    <property name="maindir" value="." /> 
    

    這將默認屬性到當前目錄,所以你可以完全消除外部的,因爲它不再需要。 ant中的屬性是隻讀的,所以如果用戶明確指定了一個值(例如從命令行),那麼將使用該值,而上面的行不會產生任何影響 - 只有當用戶不不指定主印度的值。

    事實上,我認爲你可以完全通過執行以下操作擺脫螞蟻的contrib的:

    <property name="maindir" value="." /> 
    <fail message="${maindir}/build.properties is not a valid path."> 
        <condition> 
         <not> 
          <available file="${maindir}/build.properties" /> 
         </not> 
        </condition> 
    </fail> 
    <property file="${maindir}/build.properties" /> 
    

    這應該有你正在尋找實現你的榜樣是什麼完全相同的效果。

    +0

    Thx Laepdjek。當我提到我對Alex的回答的評論時,這適用於我。 – Aykut 2011-06-15 10:41:03