2011-06-06 111 views
9

檢查在執行Ant腳本的其餘部分之前是否設置了環境變量的最有效方法是什麼?檢查Ant腳本中是否設置了環境變量

假設我的Ant腳本需要設置環境變量「FOO」。我得到了下面的工作,但我不知道是否有實現相同的結果的少convul​​ated方式:

<property environment="env"/> 
<property name="env.FOO" value=""/> 

<target name="my-target"> 
    <condition property="foo.found"> 
     <not> 
      <equals arg1="${env.FOO}" arg2=""/> 
     </not> 
    </condition> 
    <fail unless="foo.found" message="FOO not set."/> 
    <!-- do stuff here that uses the FOO environment variable --> 
</target> 

回答

21

這不是那麼簡單:

<property environment="env"/> 
<fail unless="env.FOO" message="FOO not set."/> 
+0

是的,你是對的!我只注意到我有$ {env.FOO}傳遞給了unless屬性! (即我有美元和花括號)。實際上,我遇到這個問題的原因是我實際上試圖設置一個名爲「bar」的屬性爲$ {env.FOO},然後在unless部分中使用屬性「bar」。不知道如果我想如何保留「酒吧」屬性。 – digiarnie 2011-06-06 02:12:02

+0

+1:我忘了''任務的'除非'條款。 – 2011-06-06 02:14:36

0

您可以通過使用內部<fail>嵌入式<condition>縮短了一點。

<property environment="env"/> 
<fail message="FOO not set."> 
    <condition> 
     <isset property="${env.FOO}"/> 
    </condition> 
</fail> 
0

<property name="test.home.0" value="${env.TEST_HOME}"/> 
<condition property="test.home" value="TO_BE_REPLACED"> 
    <equals arg1="${test.home.0}" arg2="\${env.TEST_HOME}"/> 
</condition> 
<property name="test.home" value="${env.TEST_HOME}"/> 

<target name="test"> 
    <echo>TEST_HOME: ${test.home}</echo> 
</target> 
7

和其他事情可以做(除大衛)是使用

<isset property="env.Foo"/> instead of <equals /> 
+0

這在Ant 1.9.2中不起作用。即使未設置FOO,該目標也不會失敗:「 ' ' – Paul 2014-07-22 15:16:06

0

關閉:

<fail message="FOO not set."> 
    <condition> 
     <isset property="env.FOO"/> 
    </condition> 
</fail> 

如果設置了$ FOO,但不會失敗,但爲空。

-1

這是我想出來的,使用isset屬性來檢查只存在於Unix上的enviro變量。 set.properties是第一個啓動它的目標。

<property environment="env" />   

<target name="init" depends="set.properties" /> 

    <!-- Do init stuff.... --> 
    </target> 

    <!-- Other target stuff..... --> 

<!-- 
     Target: set.properties 
--> 
<target name="set.properties"  
description="Initializes Build Script, checks displays properties" 
    depends="cond.hostname.exist,cond.hostname.not.exist"> 
</target> 

<!-- 
     Target: check.cond HostName is Present 
-->  
<target name="cond.check"> 
    <condition property="cond-is-true"> 
      <isset property="env.HOSTNAME"/> 
    </condition> 
</target> 

<!-- 
     Target: cond.hostname.exist 
-->   
<target name="cond.hostname.exist" depends="cond.check" if="cond-is-true"> 
    <property name="targetboxname" value="${env.HOSTNAME}" /> 
</target> 

<!-- 
     Target: cond.hostname.not.exist 
-->    
<target name="cond.hostname.not.exist" depends="cond.check" unless="cond-is-true"> 
    <property name="targetboxname" value="${env.COMPUTERNAME}" /> 
</target> 

    <!-- Then later on.... --> 
    <echo>ComputerName/HostName: ${targetboxname} </echo>