2009-05-06 18 views
63

Nie mogę dowiedzieć się, jak ustawić właściwość Ant, pod warunkiem, że nie została ustawiona (tj. Nie jest zdefiniowana w pliku właściwości i powinna automatycznie być domyślna) .Jak ustawić właściwość Ant tylko wtedy, gdy jest wyzerowana?

Jak dotąd, tylko mam następujący kod:

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

Ale to tylko wydaje się działać, jeśli wartość jest zdefiniowana w <property> tagu.

Czy ktoś wie, jak warunkowo ustawić właściwość po raz pierwszy, jeśli jest ona obecnie rozbrajana?

Odpowiedz

106

Po prostu można ustawić właściwość za pomocą właściwości-zadania. Jeśli właściwość jest już ustawiona, wartość nie ulega zmianie, ponieważ właściwości są niezmienne.

Ale można także 'nie' w swoim stanie:

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

Ant robi to domyślnie; jeśli właściwość jest już ustawiona; ustawienie go ponownie nie ma wpływu:

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

daje

/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 

Właściwości nie można na nowo; aby to zrobić, musisz użyć czegoś takiego, jak variable task from ant-contrib.

+0

To nie jest prawda. Pierwsze echo w poniższym przykładzie wyświetli "Ha1", a drugie echo wyświetli "Ha2": \t \t \t \t \t \t \t \t Denis

+1

Myślę, że się mylisz. Jest to bardzo jasne w dokumentacji Ant. Nie mogłem uruchomić twojego przykładu (gdzie jest zdefiniowane zadanie If?Nie wygląda jak składnia mitu contribs), jednak działająca da pierwszą wartość, 1. To * jest * możliwe do zrobienia poprzez pisanie niestandardowych zadań, ale tylko poprzez modyfikację bezpośrednio modelu projektu Ant. –

+0

Spróbuj umieścić mój kod w bloku docelowym – Denis

2

Właściwości w Ant są niezmienne. Po zdefiniowaniu nie można ich zmienić.

Pakiet Ant Contrib oferuje zadanie variable. Działa jak własność, ale wartości mogą być modyfikowane i rozbrajane. Exmaple z 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

Najłatwiej zrobić to, co chcesz:

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

Jest wsparcie z użyciem 'inny' w: https://ant.apache.org/manual/Tasks/condition.html służyć dokładny cel.

inny

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 

więc zmienić:

<condition property="core.bin" else="../bin"> 
    <isset property="core.bin"/> 
</condition> 
Powiązane problemy