turnos traduccion simulador puntos matricula licencias ant

traduccion - ant turnos



Cómo verificar si una propiedad tiene valor en Ant (5)

Con Ant addon Flaka puedes usar patrones como:

<property name="foo" value="bar"/> ... <fl:unless test="has.property.foo"> ... </fl:unless> ... <fl:when test="has.property.foo"> ... </fl:when>

Verificación concreta para el vacío:

<fl:when test=" empty ''${foo}'' "> <fail message="Houston we have a problem!!"/> </fl:when>

Un ejemplo completo, también usando algunos controles iguales con ''eq'' (opuesto sería ''neq''):

<project xmlns:fl="antlib:it.haefelinger.flaka"> <!-- some if/then/else construct --> <fl:choose> <!-- if --> <when test=" ''${buildtype}'' eq ''prod'' "> <!-- then --> <echo>..starting ProductionBuild</echo> </when> <when test=" ''${buildtype}'' eq ''test'' "> <!-- then --> <echo>..starting TestBuild</echo> </when> <!-- else --> <otherwise> <fl:unless test="has.property.dummybuild"> <fail message="No valid buildtype !, found => ''${buildtype}''"/> </fl:unless> <echo>.. is DummyBuild</echo> </otherwise> </fl:choose> </project>

salida con ant -f build.xml -Dbuildtype = prod
o
ant -f build.xml -Dbuildtype = prod -Ddummybuild = whatever

[echo] ..starting ProductionBuild

salida con typo => ant - build.xml -Dbuildtype = testt

BUILD FAILED /home/rosebud/workspace/AntTest/build.xml:21: No valid buildtype !, found => ''testt''

salida con ant -f build.xml -Ddummybuild = whatever

[echo] .. is DummyBuild

Tengo un archivo Ant XML que uso para compilación.

Tengo 3 propiedades. Quiero romper la compilación si estas propiedades no contienen ningún valor. También quiero romper la compilación si el valor está vacío.

¿Cómo puedo hacer esto en Ant?

Estoy usando Ant y no Ant-contrib.


Estoy en una versión anterior de Ant, por lo que isset no estaba disponible. En su lugar, utilicé la siguiente notación con el doble $ en los equivalentes.

<target name="xxx"> <echo message="${contextRoot}" /> <if> <!-- check if the contextRoot property is defined. --> <equals arg1="${contextRoot}" arg2="$${contextRoot}" /> <then> <!-- it isn''t set, set a default --> <property name="contextRoot" value="/WebAppCtx" /> </then> </if> <echo message="${contextRoot}" /> </target>



Sobre la base de las otras respuestas, esta es mi forma preferida, como una macro:

<!-- Macro to require a property is not blank --> <macrodef name="prop-require"> <attribute name="prop"/> <sequential> <fail message="Property &quot;@{prop}&quot; must be set"> <condition> <not> <isset property="@{prop}"/> </not> </condition> </fail> <fail message="Property &quot;@{prop}&quot; must not be empty"> <condition> <equals arg1="${@{prop}}" arg2=""/> </condition> </fail> </sequential> </macrodef>

Para ser utilizado como:

<target name="deploy.war" description="Do the war deployment ;)"> <prop-require prop="target.vm" /> <prop-require prop="target.vip" /> <!-- ... -->

Para abreviar, puedes colapsar los dos elementos de falla en uno usando un <or> , pero prefiero mis mensajes de error para tratarme como si no pudiera pensar por mí mismo;)


Puede usar condiciones usando la tarea <fail> :

<fail message="Property &quot;foo&quot; needs to be set to a value"> <condition> <or> <equals arg1="${foo}" arg2=""/> <not> <isset property="foo"/> </not> </or> </condition>

Esto es equivalente a decir if (not set ${foo} or ${foo} = "") es un seudocódigo. Debes leer las condiciones XML desde adentro hacia afuera.

Podría haber usado la cláusula <unless> en la tarea <fail> si solo le importaba si la variable estaba configurada o no, y no si tiene un valor real.

<fail message="Property &quot;foo&quot; needs to be set" unless="foo"/>

Sin embargo, esto no fallará si la propiedad está configurada, pero no tiene ningún valor.

Hay un truco que puede hacer esto más simple

<!-- Won''t change the value of `${foo}` if it''s already defined --> <property name="foo" value=""/> <fail message="Property &quot;foo&quot; has no value"> <condition> <equals arg1="${foo}" arg2=""/> </condition> </fail>

¡Recuerda que no puedo restablecer una propiedad! Si ${foo} ya tiene un valor, la tarea <property> anterior no hará nada. De esta forma, puedo eliminar la <isset> . Puede ser bueno ya que tiene tres propiedades:

<property name="foo" value=""/> <property name="bar" value=""/> <property name="fubar" value=""/> <fail message="You broke the build, you dufus"> <condition> <or> <equals arg1="${foo}" arg2=""/> <equals arg1="${bar}" arg2=""/> <equals arg1="${fubar}" arg2=""/> </or> </condition> </fail>