2009-05-06 17 views
63

No puedo encontrar la manera de configurar una propiedad Ant con la condición de que no se haya configurado (es decir, no está definida en el archivo de propiedades y debe ser automáticamente predeterminada) .Cómo configurar una propiedad Ant solo si no está configurada

Hasta el momento, sólo tienen el siguiente código:

<condition property="core.bin" value="../bin"> 
    <isset property="core.bin"/> 
</condition> 

Pero esto sólo parece funcionar si el valor se define en una etiqueta <property>.

¿Alguien sabe cómo configurar condicionalmente una propiedad por primera vez si actualmente no está configurada?

Respuesta

106

Simplemente puede establecer la propiedad con la propiedad-tarea. Si la propiedad ya está configurada, el valor no cambia, porque las propiedades son inmutables.

Pero también se puede incluir 'no' en su condición:

<condition property="core.bin" value="../bin"> 
    <not> 
     <isset property="core.bin"/> 
    </not> 
</condition> 
58

hormiga hace esto por defecto; si la propiedad ya está configurada; establecer de nuevo no tiene ningún efecto:

<project name="demo" default="demo"> 
    <target name="demo" > 
     <property name="aProperty" value="foo" /> 
     <property name="aProperty" value="bar" /> <!-- already defined; no effect --> 
     <echo message="Property value is '${aProperty}'" /> <!-- Displays 'foo' --> 
    </target> 
</project> 

Da

/c/scratch> ant -f build.xml 
Buildfile: build.xml 

demo: 
    [echo] Property value is '${aProperty}' 

BUILD SUCCESSFUL 
Total time: 0 seconds 
/c/scratch> ant -f build.xml 
Buildfile: build.xml 

demo: 
    [echo] Property value is 'foo' 

BUILD SUCCESSFUL 

Las propiedades no pueden ser redefinidos; para hacer esto necesitas usar algo como el variable task from ant-contrib.

+0

Esto no es cierto. El primer eco en el siguiente ejemplo imprimirá "Ha1" y el segundo echo imprimirá "Ha2": \t \t \t \t \t \t \t \t Denis

+1

Creo que estás equivocado. Esto es muy claro en la documentación Ant. No pude ejecutar su ejemplo (¿dónde está definida la tarea If?No se parece a la sintaxis de ant-contribs), sin embargo, ejecutando dará el primer valor, 1. * Es posible hacerlo escribiendo tareas personalizadas, pero solo modificando el modelo de proyecto de Ant directamente. –

+0

Trato de poner mi código en un bloque de destino – Denis

2

Las propiedades en Ant son inmutables. Después de definido, no pueden ser cambiados.

Pero el paquete Ant Contrib ofrece la tarea variable. Funciona como una propiedad, pero los valores se pueden modificar y deshacer. Exmaple del variable task documentation:

<var name="x" value="6"/> 
    <if> 
     <equals arg1="${x}" arg2="6" /> 
     <then> 
      <var name="x" value="12"/> 
     </then> 
    </if> 
    <echo>${x}</echo> <!-- will print 12 --> 
6

La forma más sencilla de hacer lo que quiere:

<if> 
    <not> 
     <isset property="your.property"/> 
    </not> 
    <then> 
     <property name="your.property" value="your.value"/> 
    </then> 
</if> 
2

Hay apoyo de la utilización de 'otra cosa' dentro: https://ant.apache.org/manual/Tasks/condition.html para servir a su propósito exacto.

demás

The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Apache Ant 1.6.3 

lo que el cambio a:

<condition property="core.bin" else="../bin"> 
    <isset property="core.bin"/> 
</condition> 
Cuestiones relacionadas