Comment exclure un répertoire d'ant fileset, basé sur le contenu des répertoires
Comment puis-je créer un fichier ant qui exclut certains répertoires basés sur le contenu du répertoire?
j'utilise ant pour créer un pot de distribution qui a chaque localisation dans des répertoires séparés, dont certains sont incomplets et ne devraient pas être libérés.
je voudrais ajouter quelque chose au répertoire (par exemple un fichier nommé incomplete.flag
) de sorte que ant exclut le répertoire. Ensuite, je peux supprimer le fichier de traduction est terminée, et l'inclure dans le construire sans modifier construire.XML.
compte tenu de cette structure de répertoire:
proj
+ locale
+ de-DE
+ en-US
+ fr-FR
ce fichier exclut tous les incompelte.flag
fichiers, mais comment puis-je exclure l'ensemble des répertoires contient?
<fileset dir="${basedir}">
<include name="locale/"/>
<exclude name="locale/*/incomplete.flag">
</fileset>
je peux écrire une tâche de fourmi si besoin est, mais j'espère que le fileset
peut gérer ce cas d'utilisation.
9 réponses
La suite est une approche qui fonctionne pour moi:
<exclude name="**/dir_name_to_exclude/**" />
vous devez ajouter un ' / ' après le nom dir
<exclude name="WEB-INF/" />
Voici une autre, au lieu d'ajouter un incomplete.flag
fichier à chaque dir que vous voulez exclure, générer un fichier qui contient une liste de tous les répertoires que vous voulez exclure et ensuite utiliser le excludesfile
l'attribut. Quelque chose comme ceci:
<fileset dir="${basedir}" excludesfile="FileWithExcludedDirs.properties">
<include name="locale/"/>
<exclude name="locale/*/incomplete.flag">
</fileset>
j'Espère que ça aide.
il y a en fait un exemple de ce type de problème dans la documentation Ant. Il rend l'utilisation de Les sélecteurs (mentionnés ci-dessus) et les mappeurs. Voir le dernier exemple dans http://ant.apache.org/manual/Types/dirset.html:
<dirset id="dirset" dir="${workingdir}">
<present targetdir="${workingdir}">
<mapper type="glob" from="*" to="*/${markerfile}" />
</present>
</dirset>
Sélectionne tous les répertoires quelque part sous ${workingdir}
qui contient un ${markerfile}
.
Réponse fournie par l'utilisateur mgaert fonctionne pour moi. Je pense qu'il doit être marqué comme le droit de réponse.
il fonctionne aussi avec des sélecteurs complexes comme dans cet exemple:
<!--
selects only direct subdirectories of ${targetdir} if they have a
sub-subdirectory named either sub1 or sub2
-->
<dirset dir="${targetdir}" >
<and>
<depth max="0"/>
<or>
<present targetdir="${targetdir}">
<globmapper from="*" to="*/sub1" />
</present>
<present targetdir="${targetdir}">
<globmapper from="*" to="*/sub2" />
</present>
</or>
</and>
</dirset>
ainsi, ayant une structure de répertoire comme ceci:
targetdir
├── bar
│ └── sub3
├── baz
│ └── sub1
├── foo
│ └── sub2
├── phoo
│ ├── sub1
│ └── sub2
└── qux
└── xyzzy
└── sub1
ci-dessus dirset contient