2011-09-30 20 views
6

¿Cómo se comprueba que la propiedad numérica es menor que en Apache Ant?Apache Ant Less Than

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

Por lo que he visto (soy nuevo en Ant) sólo se puede hacer <equal/>?

+0

similares a http://stackoverflow.com/questions/4639902/apache-ant-comparing-properties-variables que lamentablemente hace que parezca que tendrá que incrustar algunos guiones – ccoakley

+0

Gracias ccoakley. Lástima que puse menos que en el encabezado en lugar de mayor que como la búsqueda Stackoverflow no lo recogió :(. Votado para cerrar como duplicado. –

Respuesta

4

Puede usar <scriptcondition> (vea http://ant.apache.org/manual/Tasks/conditions.html).

Lea atentamente la documentación porque necesitaría instalar dependencias de jar adicionales en la hormiga.

La condición podría parecer que (no probado):

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

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

Me gustó el aspecto de la tarea 'isgreaterthan' en Ant-Contrib (ya lo usaba), No puedo encontrar la forma de usarlo. –

+0

http://ant-contrib.sourceforge.net/tasks/tasks/more_conditions.html ¿Lo intentó? – FailedDev

+1

@MattClarkson ¿Está tratando de usar '< isgreaterthan> 'en una tarea' 'Del enlace que @FailedDev proporcionó:" Desafortunadamente, no se pueden usar en la tarea ". – Jesse

2

Saludos JB Nizet, finalmente llegamos allí.

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

Un "menor que" comparioson de propiedades no es posible sin que ninguna de las tareas personalizadas o un script incrustado.

Pero en la mayoría de los casos puede escapar aplicando la prueba no a la propiedad sino a la fuente de los valores. En un sistema de compilación, estas "fuentes" generalmente son archivos. En los archivos, puede usar isfileselectedcondition junto con selector. La mayoría de los selectores aceptan when atributos como less, more o equal.

El manual para la condición isfileselected muestra un ejemplo.

0

El complemento Ant Flaka proporciona una tarea de error que evalúa expresiones EL, es decir, :

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

de salida:

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

ver Flaka manual para más detalles

2

Aquí está el uso de <isgreaterthan> tarea condiciones, con cualquier secuencias de comandos:

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

Además, arg1, el valor de arg2 puede ser de propiedad variable.

Nota: <isgreaterthan> es una condición adicional disponible con Ant-Contrib:

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

+0

¿Esto funciona? De los documentos:" Estas condiciones son adecuadas para su uso en el Por desgracia, no se pueden usar en la tarea ... ". Cuando intento esto, la compilación falla:" si no admite el elemento "isgreaterthan" anidado " –

0

realidad, la respuesta proporcionada por @GnanaPrakash es incompleta. De la documentación Ant Contrib:

Estas condiciones son adecuadas para su uso en el elemento. Por desgracia, no se pueden utilizar en la tarea < condición >, a pesar de todas las condiciones para la tarea se pueden utilizar con el <bool> y la <bool> se pueden utilizar en cualquier lugar que < condición > se puede utilizar.

Así, el islessthan o las alternativas isgreaterthan elementos debe ser envuelto en un elemento bool así:

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

Si no lo hace de esta manera obtendrá un error que dice :

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

Nota pequeña: appar Esto no funciona con antcontrib-1.0b3: https://stackoverflow.com/a/12391161/2581587 –