file - tarea - que es ant en java
¿La tarea Ant ejecuta un objetivo Ant solo si existe un archivo? (6)
¿Hay una tarea ANT que ejecute un bloque solo si existe un archivo dado? Tengo el problema de que tengo un script ant genérico que debe hacer un procesamiento especial, pero solo si hay un archivo de configuración específico presente.
Consulte Usar filtros de nombre de archivo como DB_*/**/*.sql
Aquí hay una variación para realizar una acción si existen uno o más archivos correspondientes a un filtro comodín. Es decir, usted no sabe el nombre exacto del archivo.
Aquí, estamos buscando archivos " * .sql " en cualquier subdirectorio llamado " DB_ * ", recursivamente. Puede ajustar el filtro a sus necesidades.
NB: ¡Apache Ant 1.7 y superior!
Aquí está el objetivo para establecer una propiedad si existen archivos coincidentes:
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
Aquí hay un objetivo "condicional" que solo se ejecuta si existen archivos:
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>
Creo que vale la pena hacer referencia a esta respuesta similar: https://.com/a/5288804/64313
Aquí hay otra solución rápida. Existen otras variaciones posibles con la etiqueta <available>
:
# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
<condition><not>
<available file="${file}" />
</not></condition>
</fail>
Desde Ant 1.8.0 aparentemente también existen recursos
De http://ant.apache.org/manual/Tasks/conditions.html
Prueba un recurso para la existencia. desde Ant 1.8.0
El recurso real a probar se especifica como un elemento anidado.
Un ejemplo:
<resourceexists> <file file="${file}"/> </resourceexists>
Estaba a punto de volver a trabajar el ejemplo de la buena respuesta anterior a esta pregunta, y luego encontré esto
A partir de Ant 1.8.0, en su lugar puede usar la expansión de propiedad; un valor de true (o on o yes) habilitará el elemento, mientras que false (o off o no) lo desactivará. Se sigue suponiendo que otros valores son nombres de propiedad, por lo que el elemento solo se habilita si se define la propiedad indicada.
En comparación con el estilo anterior, esto le brinda flexibilidad adicional, ya que puede anular la condición desde la línea de comando o las secuencias de comandos principales:
<target name="-check-use-file" unless="file.exists"> <available property="file.exists" file="some-file"/> </target> <target name="use-file" depends="-check-use-file" if="${file.exists}"> <!-- do something requiring that file... --> </target> <target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>
del manual de hormigas en http://ant.apache.org/manual/Tasks/conditions.html
Espero que este ejemplo sea útil para algunos. No están utilizando resourceexists, pero ¿se supone que podrías? .....
Esto podría tener un poco más de sentido desde una perspectiva de codificación (disponible con ant-contrib: http://ant-contrib.sourceforge.net/ ):
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
Puede hacerlo ordenando hacer la operación con una lista de archivos con nombres iguales al nombre (s) 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>
Ver: FileSet .