2011-06-13 5 views
30

Usando ANT, ¿cómo puedo asegurarme de que ese directorio exista antes de intentar eliminarlo?¿Cómo verificar si el directorio existe antes de eliminarlo, usando ANT?

Como parte de mi tarea de limpieza actual, sin embargo i

<target name="clean" description="clean"> 
    <delete dir="${build}" /> 
    <delete dir="${bin}" /> 
    <delete dir="${dist}/myrunner.${version}.jar" /> 
    <delete dir="${doc}" /> 
    <delete dir="${report}" /> 
</target> 

Esto funciona bien, (obviamente) Retire ocurre cuando hay algo de eliminar.

Usando ANT, ¿cómo puedo verificar si el directorio existe?

+0

¿Hay alguna razón usted necesita para comprobar si existe el directorio antes de eliminarlo? –

Respuesta

11

Niza y solución limpia a continuación: Usando ant-contribs.jar

Al utilizar esta solución, asegúrese de poner la siguiente línea en la parte superior

<!-- For <if> statements --> 
<taskdef resource="net/sf/antcontrib/antlib.xml" /> 

<!-- Remove distribution directories and their content for a clean build --> <target name="clean" description="clean"> <if> <available file="${build}" type="dir" /> <then> <delete dir="${build}" /> </then> </if> </target>
13

con la hormiga de vainilla que usaría algo como =

<target name="check"> 
    <condition property="deldir"> 
    <available file="${somedir}" type="dir"/> 
    </condition> 
</target> 

<target name="deldir" depends="check" if="deldir"> 
<delete dir="${somedir}"/> 
    <!-- .. --> 
</target> 

otra cosa ver = Ant check existence for a set of files
para una pregunta similar

35

Para este caso específico, no voy a responder a la pregunta "¿cómo encontrar si existe un directorio ", porque eso ya ha sido respondido, pero solo voy a señalar que en su tarea limpia puede usar failonerror="false" para evitar que la tarea ant se cierre. Esto debería ser adecuado en una tarea limpia porque si no hay nada que limpiar, no debería ser un problema.

<target name="clean" description="clean"> 
     <delete dir="${build}" failonerror="false"/> 
     .... 
     <delete dir="${report}" failonerror="false"/> 
    </target> 

Esto es útil si no desea instalar ant-contrib o no puede por alguna razón.

+14

¿Qué pasa si hay algo para limpiar pero falla en algún otro error, por ejemplo, alguien ha bloqueado un archivo en el directorio para editarlo? Querría que esos errores sean reportados. – Carlos

+0

Simple. Limpiar. Buena respuesta. –

+2

Estoy de acuerdo con Carlos. Te perderás errores reales con failonerror = "false". Para ignorar todo tipo de error solo para evitar fallar, si todo está limpio ya no es una mala idea. – niks

0

Puede hacerlo ordenando eliminar una lista de archivos con nombres iguales al nombre que necesita. Es mucho más fácil y directo que crear un objetivo especial. Y no necesita ninguna herramienta adicional, solo hormiga pura.

<delete> 
     <fileset includes="name or names of file or files you need to delete"/> 
    </delete> 

http://ant.apache.org/manual/Types/fileset.html

1

Aquí está la respuesta:

<target name="delete.target.directory"> 
     <delete includeemptydirs="true" verbose="false" if="${(directory::exists(directory))}"> 
      <fileset basedir="${directory}"> 
       <include name="**/*.*" /> 
      </fileset> 
     </delete> 
    </target> 
Cuestiones relacionadas