2011-09-30 16 views
6

Come mai si controlla che una proprietà numero sia inferiore a quella di Apache Ant?Apache Ant inferiore a

<property name="small" value="15"/> 
<property name="big" value="156"/> 
<fail message="small is less than big!"> 
    <condition> 
    <lessthan val1="${small}" val2="${big}"/> 
    </condition> 
</fail> 

Da quello che ho visto (Sono nuovo di Ant) si può fare solo <equal/>?

+0

Simile a http://stackoverflow.com/questions/4639902/apache-ant-comparing-properties-variables che purtroppo fa sembrare che dovrete incorporare qualche script. – ccoakley

+0

Grazie ccoakley. Peccato che ho messo meno dell'intestazione piuttosto che maggiore di come la ricerca StackOverflow non l'ha raccolto :(. Votato per chiudere come duplicato. –

risposta

4

È possibile utilizzare uno <scriptcondition> (vedere http://ant.apache.org/manual/Tasks/conditions.html).

Leggere attentamente la documentazione poiché è necessario installare ulteriori dipendenze jar in ant.

La condizione potrebbe sembrare che (non testato):

<scriptcondition language="javascript"> 
    var small = parseInt(project.getProperty("small")); 
    var big = parseInt(project.getProperty("big")); 

    self.setValue(small < big); 
</scriptcondition> 
+0

Mi è piaciuto l'aspetto dell'attività 'isgreaterthan' in Ant-Contrib (già usando quello), Non riesco a capire come usarlo però –

+0

http://ant-contrib.sourceforge.net/tasks/tasks/more_conditions.html hai provato questo? – FailedDev

+1

@MattClarkson Stai forse cercando di usare '< isgreaterthan> 'in un'attività' 'Dal collegamento che @FailedDev ha fornito:" Sfortunatamente, non possono essere utilizzati nell'attività ". – Jesse

2

Acclamazioni JB Nizet, finalmente lì.

<!-- Test the Ant Version --> 
<property name="burning-boots-web-build.required-ant-version" value="1.8.2"/> 
<script language="javascript"> 
    <![CDATA[ 
     var current  = project.getProperty("ant.version").match(/([0-9](\.)?)+/)[0].replace(/\./g,""); 
     var required = project.getProperty("burning-boots-web-build.required-ant-version").match(/([0-9](\.)?)+/)[0].replace(/\./g,""); 
     project.setProperty('ant.valid-version', current < required ? "false" : "true"); 
    ]]> 
</script> 
<fail message="This build requires Ant version ${burning-boots-web-build.required-ant-version}."> 
    <condition> 
     <isfalse value="${ant.valid-version}"/> 
    </condition> 
</fail> 
0

A "meno" comparioson di proprietà non è possibile senza né attività personalizzate o uno script incorporato.

Ma nella maggior parte dei casi è possibile scappare applicando il test non alla proprietà ma all'origine dei valori. In un sistema di compilazione queste "fonti" sono di solito file. Sui file è possibile utilizzare isfileselectedcondition insieme a selector. La maggior parte dei selettori accetta gli attributi when come less, more o equal.

Il manuale per la condizione isfileselected mostra un esempio.

0

L'addon Ant Flaka fornisce un'attività di errore che valuta le espressioni EL, ad es. :

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka"> 
<property name="small" value="15"/> 
<property name="big" value="156"/> 
<fl:fail message="small is less than big!" test="small lt big"/> 
</project> 

uscita:

BUILD FAILED 
/home/rosebud/workspace/Ant/demo.xml:7: small is less than big! 

vedi Flaka manual per ulteriori dettagli

2

Ecco l'utilizzo di <isgreaterthan> condizione compito con qualsiasi scripting:

<if> 
    <isgreaterthan arg1="100" arg2="10"/> 
    <then> 
     <echo>Number 100 is greater than number 10</echo> 
    </then> 
</if> 

Inoltre, arg1, il valore arg2 può essere di variabile di proprietà.

Nota: <isgreaterthan> è una condizione aggiuntiva disponibile con Formica-Contrib:

http://ant-contrib.sourceforge.net/tasks/tasks/more_conditions.html

+0

Sicuramente funziona? Dai documenti:" Queste condizioni sono adatte per l'uso nello Sfortunatamente, non possono essere utilizzati nell'attività ... ". Quando provo, la compilazione fallisce:" se non supporta l'elemento "isgreaterthan" nidificato " –

0

realtà, la risposta fornita da @GnanaPrakash è incompleta. Dalla documentazione Ant Contrib:

Queste condizioni sono adatti per l'uso nell'elemento. Purtroppo, non possono essere utilizzati nel compito <condizioni>, anche se tutte le condizioni per l'attività possono essere utilizzati con il <bool> e la <bool> possono essere utilizzati ovunque che <condizione> può essere utilizzato.

Così, il islessthan o le alternative isgreaterthan elementi deve essere avvolto in un elemento bool in questo modo:

<property name="small" value="15" /> 
<property name="big" value="156" /> 
<if> 
    <bool> 
     <islessthan arg1="${small}" arg2="${big}"/> 
    </bool> 
    <then> 
     <echo message="small is less than big!" /> 
    </then> 
    <else> 
     <echo message="big is less than small!" /> 
    </else> 
</if> 

Se non si fa in questo modo si otterrà un errore che dice :

if doesn't support the nested "islessthan" element. 
+0

Piccola nota: apparente Questo non funziona con antcontrib-1.0b3: https://stackoverflow.com/a/12391161/2581587 –

Problemi correlati