2011-06-06 13 views
9

¿Cuál es la forma más eficaz de comprobar si se ha establecido una variable de entorno antes de ejecutar el resto de un script Ant?Comprobar si la variable de entorno se ha configurado en el script Ant

Digamos que mi script Ant requiere que se establezca la variable de entorno "FOO". Me dio la siguiente para el trabajo, pero me preguntaba si había una manera menos convulated de lograr el mismo resultado:

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

Respuesta

21

No es esto tan simple como:

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

Sí, tienes razón! ¡Solo me di cuenta de que tenía $ {env.FOO} pasado al atributo de menos! (es decir, yo tenía el dólar y las llaves). De hecho, la razón por la que tuve ese problema fue que en realidad traté de establecer una propiedad con el nombre "bar" para que fuera $ {env.FOO} y luego use la propiedad "barra" en la parte a menos. No estoy seguro de cómo mantendría la propiedad "bar" si quisiera. – digiarnie

+0

+1: Olvidé la cláusula 'a menos que' de la tarea ''. –

0

Puede acortarlo un poco mediante el uso de un <condition> incrustado dentro <fail>.

<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

y la otra cosa que puedes hacer (además de David) es el uso

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

Esto no funciona en Ant 1.9.2. Este objetivo no falla, incluso si FOO no se establece: ' ' ' – Paul

0

Cerrar:

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

Esto no fallará si se configuró $ FOO, pero es nulo.

-1

Esto es lo que se me ocurrió, utilizando la propiedad isset para buscar una variable enviro que solo está presente en Unix. set.properties es el primer objetivo para poner esto en marcha.

<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> 
Cuestiones relacionadas