2011-03-12 15 views
14

¿Cómo puedo verificar si existe un conjunto de archivos (lista de rutas separadas por comas) o no?Existencia de comprobación de hormigas para un conjunto de archivos

Por ejemplo tengo que comprobar si todos los caminos que figuran en myprop existen y si es así quiero establecer una propiedad pathExist:

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

Así, en el ejemplo, todos path1path2path3 deben existir para establecer pathExist a true, de lo contrario false.

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

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

+0

ver también [Cómo utilizar comodín en comandos de Ant Disponible] (http://stackoverflow.com/questions/1073077/how-to-use-wildcard-in-ants-available-command/) – Vadzim

Respuesta

12

Se puede utilizar una combinación de una tarea filelist, restrict y condition 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, se encuentra 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}" /> 

Usted podría utilizar algo como esto para generar un mensaje de fallo de una lista de los archivos que faltan:

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

La solución puede ser acortado con la condición de recurso de recursos: http://stackoverflow.com/a/19219702/603516 – Vadzim

+3

Al usar esta solución con Ant 1.7.1, agregue 'xmlns: rsel =" antlib: org.apache.tools.ant.types.resources. selectores "' al elemento ''. Luego cambie '' a '' y '' a ''. –

2

condiciones entregado son la solución más corto para comprobar la existencia de múltiples 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 de ruta commaseparated utilizar complemento Ant Flaka, F. E. :

<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 script JVM como maravilloso, beanshell .. etc

1

Esto se puede solucionar con el conjunto de operaciones de Ant's resource collections. 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 check informa de la lista de archivos que faltan sólo si falta un archivo.

Cuestiones relacionadas