2011-06-16 13 views
11

Sto usando Ant 1.8.1. Se ho passato in un argomento sulla linea di comando ...Ant: come posso impostare una proprietà da un elenco separato da virgole passato sulla riga di comando?

-DenableProperties=abc,def,ghi,jkl 

Come faccio a impostare le singole proprietà (true/false) nel mio script Ant?

<property name="abc" value="???" /> 
<property name="def" value="???" /> 

Si noti che nell'esempio di cui sopra, vorrei Ant di avere accesso a una proprietà "$ {abc}" che è impostata su true, mentre se si è cercato di accedere alla proprietà "$ {} mno "quella proprietà sarebbe falsa, o almeno un valore diverso dal vero.

Grazie, - Dave

risposta

13

non riesco a pensare a un modo per fare questo in nucleo Ant. Potresti farlo con lo For task di ant-contrib.

<project default="test"> 

    <taskdef resource="net/sf/antcontrib/antlib.xml"> 
    <classpath> 
     <pathelement location="C:/lib/ant-contrib/ant-contrib-1.0b3.jar"/> 
    </classpath> 
    </taskdef> 

    <target name="test"> 
    <for list="${enableProperties}" param="prop"> 
     <sequential> 
     <property name="@{prop}" value="true"/> 
     </sequential> 
    </for> 
    <for list="${enableProperties}" param="prop"> 
     <sequential> 
     <echo message="@{prop}=${@{prop}}"/> 
     </sequential> 
    </for> 
    </target> 

</project> 

uscita:

$ ant -DenableProperties=abc,def,ghi,jkl 
Buildfile: build.xml 

test: 
    [echo] abc=true 
    [echo] def=true 
    [echo] ghi=true 
    [echo] jkl=true 

BUILD SUCCESSFUL 
Total time: 0 seconds 
1

come decidere quando un elemento della vostra proprietà $ enableproperties deve essere impostata su false o vere?
Alcuni criteri missin ..
Dalla mia comprensione della tua domanda si potrebbe provare qualcosa di simile, la mia soluzione è basata su Ant plugin Flaka

partire con ant -f demo.xml -Denableproperties = abC# t, Def # t, ghi , jkl # t, mno
significa che tutti gli elementi nell'elenco che dovrebbero essere impostate su true nello script devono essere propertyname # t altri
saranno impostate su false

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka"> 

    <fl:for var="p" in="split('${enableproperties}', ',')"> 
     <fl:let>#{split(p, '#')[0]} := #{split(p, '#')[1] == 't' ? 'true' : 'false'}</fl:let> 
    </fl:for> 

    <echo> 
$${abc} = ${abc} 
$${def} = ${def} 
$${ghi} = ${ghi} 
$${jkl} = ${jkl} 
$${mno} = ${mno} 
    </echo> 

</project> 

uscita

[echo] ${abc} = true 
[echo] ${def} = true 
[echo] ${ghi} = false 
[echo] ${jkl} = true 
[echo] ${mno} = false 

Disclosure = sto partecipando come committer nel progetto Flaka

Problemi correlati