2009-05-06 17 views
63

Non riesco a capire come impostare una proprietà Ant sulla condizione che non sia stata impostata (cioè non è definita nel file delle proprietà e dovrebbe essere automaticamente predefinita) .Come impostare una proprietà Ant solo se è disinserita

Finora, ho solo il seguente codice:

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

Ma questo sembra funzionare solo se il valore è definito in un tag <property>.

Qualcuno sa come impostare una proprietà in modo condizionato per la prima volta se attualmente non viene impostata?

risposta

106

È sufficiente impostare la proprietà con l'attività di proprietà. Se la proprietà è già impostata, il valore è invariato, poiché le proprietà sono immutabili.

Ma si può anche includere 'non e' in condizione di:

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

Ant fa questo di default; se la proprietà è già impostata; l'impostazione di nuovo non ha alcun effetto:

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

/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 

Proprietà non possono essere ridefiniti; per fare questo è necessario utilizzare qualcosa come il variable task from ant-contrib.

+0

Questo non è vero. Il primo eco nel seguente esempio stamperà "Ha1" e il secondo echo stamperà "Ha2": \t \t \t \t \t \t \t \t Denis

+1

Penso che ti sbagli. Questo è molto chiaro nella documentazione di Ant. Non ho potuto eseguire il tuo esempio (dove è definita l'attività If?Non sembra la sintassi di ant-contribs), tuttavia, con darà il primo valore, 1. È * possibile * farlo scrivendo attività personalizzate, ma solo modificando direttamente il modello di progetto di Ant. –

+0

Prova a inserire il mio codice in un blocco di destinazione – Denis

2

Le proprietà in Ant sono immutabili. Dopo aver definito, non possono essere modificati.

Ma il pacchetto Ant Contrib offre l'attività variable. Funziona come una proprietà ma i valori possono essere modificati e disattivati. Exmaple dal 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

Il modo più semplice per fare ciò che si vuole:

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

V'è il supporto di usare 'altro' entro: https://ant.apache.org/manual/Tasks/condition.html per servire il vostro scopo esatto.

altro

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 

Così Passa a:

<condition property="core.bin" else="../bin"> 
    <isset property="core.bin"/> 
</condition> 
Problemi correlati