2009-06-01 11 views
50

Chciałbym, aby mój skrypt budowania działał prawidłowo w środowiskach wydań i rozwoju.Zdefiniuj właściwość ant z środowiska o wartości domyślnej

Do tego chciałbym zdefiniować właściwość w mrówka, nazwać (np) fileTargetName

fileTargetName dostanie jego wartość ze zmiennej środowiskowej RELEASE_VER jeśli jest ona dostępna, jeśli nie jest dostępna będzie się domyślną wartość dev

Pomoc z ant <condition><value></condition> & <property> aby uzyskać jego pracy jest doceniana.

Odpowiedz

71

Przykładem z Ant documentation jak dostać się do zmiennej środowiskowej nieruchomości:

<property environment="env"/> 
<echo message="Number of Processors = ${env.NUMBER_OF_PROCESSORS}"/> 
<echo message="ANT_HOME is set to = ${env.ANT_HOME}"/> 

W twoim przypadku, należałoby użyć ${env.RELEASE_VER}.

Następnie dla części warunkowej, dokumentacja here mówi, że istnieją trzy możliwe atrybutów:

 
Attribute Description            Required 
property The name of the property to set.      Yes 
value  The value to set the property to. Defaults to "true". No 
else  The value to set the property to if the condition  No 
      evaluates to false. By default the property will 
      remain unset. Since Ant 1.6.3 

wprowadzenie go razem:

<property environment="env"/> 
<condition property="fileTargetName" value="${env.RELEASE_VER}" else="dev"> 
    <isset property="env.RELEASE_VER" /> 
</condition> 
+2

Wczoraj nie byłbym w stanie odpowiedzieć na to pytanie, ale SO zmusiło mnie do badań. Brawo dla StackOverflow! –

+1

Dziękujemy! Dziwne zachowanie ant: Jeśli parametr środowiska nie jest ustawiony, wykonanie echa na $ {env.ANT_HOME} wyświetli "$ {env.ANT_HOME}". Domyślne wywołanie ant nie ustawia go (przynajmniej na tej maszynie: RH WS 5, bash) –

0

Jestem pewien, że są prostsze sposoby niż ten, ale o:

<project name="example" default="show-props"> 

    <property environment="env" /> 

    <condition property="fileTargetName" value="${env.RELEASE_VER}"> 
     <isset property="env.RELEASE_VER" /> 
    </condition> 

    <condition property="fileTargetName" value="dev"> 
     <not> 
      <isset property="env.RELEASE_VER" /> 
     </not> 
    </condition> 

    <target name="show-props"> 
     <echo>property is ${fileTargetName}</echo> 
    </target> 

</project> 
+0

Nie wiedział o atrybucie else warunku - @mmyers FTW – toolkit

+0

Myślę, że wszystko, co trzeba w instrukcji, ma swoje zalety . :) –

38

Nie musisz używać <condition> do tego. Właściwości w Ant są immutable, więc można po prostu użyć tego:

<property environment="env"/> 
<property name="env.RELEASE_VER" value="dev"/> 

Jeśli zmienna RELEASE_VER środowisko jest ustawiona, wówczas właściwość dostanie swoją wartość z otoczenia, a drugi <property> oświadczenie nie będzie miało wpływu. W przeciwnym razie właściwość zostanie rozbrojona po pierwszej instrukcji, a druga instrukcja ustawi jej wartość na "dev".

+0

Niezupełnie ten sam efekt, ale myślę, że można po prostu dodać kolejne , aby nadać mu dowolną nazwę, prawda? –

+0

Oczywiście, możesz dodać trzecią linię, np. . –

+0

Dzięki, to niezły zwrot w tej kwestii. Ze względu na czytelność będę trzymać się warunku. –