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.

27
demandé sur Chadwick 2010-02-10 01:19:15

9 réponses

La suite est une approche qui fonctionne pour moi:

<exclude name="**/dir_name_to_exclude/**" />
56
répondu Sasha 2010-11-09 09:01:10

vous devez ajouter un ' / ' après le nom dir

<exclude name="WEB-INF/" />
16
répondu Nicolas Robert-Dehault 2010-11-17 17:01:53

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.

7
répondu Alonso 2010-02-11 03:06:26

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}.

5
répondu mgaert 2014-09-05 12:42:46

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