veneno pesticidas para metodos mejor insecticidas insecticida hormigas cultivos control caseras casa ant

ant - metodos - pesticidas para hormigas



Existencia de control de hormigas para un conjunto de archivos (3)

En la hormiga, ¿cómo puedo verificar si existe un conjunto de archivos (lista de rutas separadas por comas) o no?

Por ejemplo, necesito verificar si existen todas las rutas enumeradas en myprop y si es así, quiero establecer una propiedad pathExist :

<property name="myprop" value="path1,path2,path3"/>

Entonces, en el ejemplo, todos los path1 path2 path3 deben existir para establecer pathExist en true , de lo contrario false .

Descubrí que para un solo recurso puedo usar la tarea resourceexist , pero no puedo encontrar la forma de usar eso con una lista de rutas separadas por comas.

¿Cómo puedo verificar la existencia de un conjunto de rutas? ¡Gracias!


Esto se puede resolver con las operaciones establecidas de las colecciones de recursos de Ant. Si calcula la intersección de la lista de archivos necesarios con la lista de archivos existentes, no debe diferir de la lista de archivos necesarios. Esto muestra cómo hacerlo:

<property name="files" value="a.jar,b.jar,c.jar"/> <target name="missing"> <condition property="missing"> <resourcecount when="ne" count="0"> <difference id="missing"> <intersect> <filelist id="required" dir="." files="${files}"/> <fileset id="existing" dir="." includes="*.jar"/> </intersect> <filelist refid="required"/> </difference> </resourcecount> </condition> </target> <target name="check" depends="missing" if="missing"> <echo message="missing: ${toString:missing}"/> </target>

El objetivo de check informa la lista de archivos perdidos solo si falta un archivo.


Las condiciones incluidas son la solución más corta para verificar la existencia de varios directorios o archivos:

<condition property="pathExist"> <and> <available file="/foo/bar" type="dir"/> <available file="/foo/baz" type="dir"/> <available file="path/to/foobar.txt"/> ... </and> </condition>

Para comprobar si hay una lista separada por comas del camino, use Ant addon Flaka , fe:

<project xmlns:fl="antlib:it.haefelinger.flaka"> <!-- when you have a cvs property use split function to get your list to iterate over --> <property name="checkpath" value="/foo/bar,/foo/baz,/foo/bazz"/> <fl:for var="file" in="split(''${checkpath}'', '','')"> <fl:fail message="#{file} does not exist !!" test="!file.tofile.exists"/> </fl:for> </project>

Otra posibilidad es el uso de la tarea scriptcondition con un lenguaje de scripts jvm como groovy, beanshell ... etc.


Puede usar una combinación de una lista de filelist , restrict y realizar una tarea para esto.

En el ejemplo siguiente, se crea una lista de archivos desde la propiedad con la lista de archivos separados por comas. Usando restrict una lista de los archivos que no existen. Esto se coloca en una propiedad que estará vacía si se encuentran todos los archivos.

<property name="myprop" value="path1,path2,path3"/> <filelist id="my.files" dir="." files="${myprop}" /> <restrict id="missing.files"> <filelist refid="my.files"/> <not> <exists/> </not> </restrict> <property name="missing.files" refid="missing.files" /> <condition property="pathExist" value="true" else="false"> <length string="${missing.files}" length="0" /> </condition> <echo message="Files all found: ${pathExist}" />

Puede usar algo como esto para generar un mensaje de error que enumere los archivos que faltan:

<fail message="Missing files: ${missing.files}"> <condition> <length string="${missing.files}" when="greater" length="0" /> </condition> </fail>