Existe-t-il une tâche ANT qui exécuterait un bloc uniquement si un fichier donné existe? Le problème est que j'ai un script Ant générique qui doit faire l'objet d'un traitement spécial, mais uniquement si un fichier de configuration spécifique est présent.
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
Cela pourrait sembler un peu plus logique du point de vue du codage (disponible avec ant-contrib: http://ant-contrib.sourceforge.net/ ):
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
Depuis Ant 1.8.0, il y a apparemment aussi des ressources
De http://ant.Apache.org/manual/Tasks/conditions.html
Teste l'existence d'une ressource. depuis Ant 1.8.0
La ressource réelle à tester est spécifiée en tant qu'élément imbriqué.
Un exemple:
<resourceexists> <file file="${file}"/> </resourceexists>
J'étais sur le point de retravailler l'exemple de la bonne réponse ci-dessus à cette question, puis j'ai trouvé ceci
À partir de Ant 1.8.0, vous pouvez plutôt utiliser l'extension de propriété; une valeur true (ou on ou yes) activera l'élément, tandis que false (ou off ou no) le désactivera. Les autres valeurs sont toujours considérées comme des noms de propriétés et l'élément n'est activé que si la propriété nommée est définie.
Par rapport au style plus ancien, cela vous donne une flexibilité supplémentaire, car vous pouvez remplacer la condition à partir de la ligne de commande ou des scripts parents:
<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"/>
du manuel de fourmi à l’adresse http://ant.Apache.org/manual/properties.html#if+unless
J'espère que cet exemple est utile à certains. Ils n'utilisent pas resourceexists, mais probablement que vous pourriez? .....
Je pense que sa mérite de référencer cette réponse similaire: https://stackoverflow.com/a/5288804/6431
Voici une autre solution rapide. Il y a d'autres variations possibles à ce sujet en utilisant le <available>
tag:
# 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>
DB_*/**/*.sql
Voici une variante pour effectuer une action s'il existe un ou plusieurs fichiers correspondant à un filtre générique. C'est-à-dire que vous ne connaissez pas le nom exact du fichier.
Ici, nous recherchons des fichiers "*. Sql" dans tous les sous-répertoires nommés "DB _ *", de manière récursive. Vous pouvez adapter le filtre à vos besoins.
NB: Apache Ant 1.7 et supérieur!
Voici la cible pour définir une propriété s'il existe des fichiers correspondants:
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
Voici une cible "conditionnelle" qui ne s'exécute que si des fichiers existent:
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>
Vous pouvez le faire en ordonnant de faire l'opération avec une liste de fichiers dont le nom correspond au (x) nom (s) requis. Il est beaucoup plus facile et direct que de créer une cible spéciale. Et vous n'avez pas besoin d'outils supplémentaires, mais simplement de Ant.
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>
Voir: FileSet .