ant ant-contrib

tarea ant-contrib-if/then/else



(5)

Las propiedades Ant son muy difíciles de sobrescribir (si no imposibles). Lo que necesitas es una variable . Estos también se definen en Ant Contrib JAR.

Editando tu ejemplo:

<target name="ifthen"> <var name="Evangelist" value="${giv}" /> <echo message="input name: ${Evangelist}" /> <if> <equals arg1="${Evangelist}" arg2="Mark" /> <then> </then> <else> <var name="Evangelist" value="John" /> </else> </if> <echo message="should be overwritten with John except for Mark: ${Evangelist}" /> </target>

Estoy usando ant, y tengo un problema con la tarea if / then / else, (ant-contrib-1.0b3.jar). Estoy ejecutando algo que se puede simplificar con build.xml a continuación.

Espero obtener de ''ant -Dgiv = Luke'' el mensaje

input name: Luke should be overwritten with John except for Mark: John

pero parece que la propiedad "giv" no se sobrescribe en el interior si / then / else ...

input name: Luke should be overwritten with John except for Mark: Luke

¿Depende del hecho de que estoy usando la tarea igual con ${giv} ? De lo contrario, ¿qué está mal en mi código?

CÓDIGO build.xml:

<project name="Friend" default="ifthen" basedir="."> <property name="runningLocation" location="" /> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="${runningLocation}/antlib/ant-contrib-1.0b3.jar" /> </classpath> </taskdef> <target name="ifthen"> <echo message="input name: ${giv}" /> <if> <equals arg1="${giv}" arg2="Mark" /> <then> </then> <else> <property name="giv" value="John" /> </else> </if> <echo message="should be overwritten with John except for Mark: ${giv}" /> </target> </project>


<project name="Friend" default="ifthen" basedir="."> <property name="runningLocation" location="" /> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="${runningLocation}/antlib/ant-contrib-1.0b3.jar" /> </classpath> </taskdef> <target name="ifthen"> <echo message="input name: ${giv}" /> <if> <equals arg1="${giv}" arg2="Mark" /> <then> </then> <else> <var name="giv" unset="true"/> <property name="giv" value="John" /> </else> </if> <echo message="should be overwritten with John except for Mark: ${giv}" /> </target> </project>

Podemos usar var task para desarmar la propiedad también.


Sé que esto es viejo, pero debería ser práctico para otros que buscan una solución.

para volver a asignar una propiedad sin usar ant-contrib, use macrodef con una secuencia de comandos.

<macrodef name="property-change"> <attribute name="name"/> <attribute name="value"/> <sequential> <script language="javascript"><![CDATA[ project.setProperty("@{name}", "@{value}"); ]]></script> </sequential> </macrodef>

luego, en cualquier lugar de la hormiga, solo llámalo como la etiqueta de propiedad

<property-change name="giv" value="John"/>

Para implementar esto en su versión original de xml, se vería así:

<project name="Friend" default="ifthen" basedir="."> <property name="runningLocation" location="" /> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="${runningLocation}/antlib/ant-contrib-1.0b3.jar" /> </classpath> </taskdef> <target name="ifthen"> <echo message="input name: ${giv}" /> <if> <equals arg1="${giv}" arg2="Mark" /> <then> </then> <else> <property-change name="giv" value="John" /> </else> </if> <echo message="should be overwritten with John except for Mark: ${giv}" /> </target> </project>

Este ejemplo se proporciona únicamente como un ejemplo al escribir una macro para reemplazar el comando <var> en ant-contrib. En una situación como esta, donde se usa el comando <if>, tiene más sentido usar <var> sinnce ant-contrib ya está cargado, y <var> puede ser más rápido en el procesamiento.

Espero que esto ayude.


Es posible reasignar el valor de una propiedad usando ant-contrib ''propertycopy''. Esta es una alternativa al uso de Variables ant-contrib. De esta manera, la propiedad "giv" se puede sobrescribir.

<target name="ifthen"> <echo message="input name: ${giv}" /> <if> <equals arg1="${giv}" arg2="Mark" /> <then> </then> <else> <property name="tempName" value="John" /> <propertycopy name="giv" from="tempName" override="true" /> </else> </if> <echo message="should be overwritten with John except for Mark: ${giv}" /> </target>

Tenga en cuenta que esto supone que la propiedad tempName no está configurada en un valor que no sea ''John''.


En Ant, una propiedad siempre se establece una vez. Después de que no sea modificable.

Aquí hay una solución que usa la hormiga estándar (sin ant-contrib) que podría ser útil para otras personas que no desean otra dependencia.

<target name="test" > <echo message="input name: ${param}" /> <condition property="cond" > <equals arg1="${param}" arg2="Mark" /> </condition> </target> <target name="init" depends="test" if="cond"> <property name="param2" value="Mark" /> </target> <target name="finalize" depends="init"> <property name="param2" value="John" /> <echo message="should be overwritten with John except for Mark: ${param2}" /> </target>