2009-06-19 11 views
23

J'ai un cas où je ne peux pas comprendre comment obtenir Ant pour tirer seulement les fichiers que je veux dans un ensemble de fichiers (pourquoi diable les Ant n'ont-ils pas seulement utilisé regex?).Tricky Ant ensemble de fichiers (inclure la plupart, mais pas tous d'un répertoire)

Voici la situation. J'ai un tas de classes sous le répertoire des classes. Je veux:

1) Tous les fichiers sous les classes,

2), mais pas les sous/com/foo/bar

3) Sauf que je ne veux/com/foo/bar/AbstractCustomerAdapter .class et CustomerAdapterFactory.class.

Les fichiers sous/com/foo/bar sont généralement nommés comme FooCustomerAdapter.class. En un mot, nous créons 2 pots, un avec juste les adeptes spécifiques du client et un avec tout le reste. Cela nous permet de créer un nouvel adaptateur client et d'échanger uniquement ce mini-pot. L'ensemble de fichiers ci-dessus qui me tue est le "tout le reste".

Une fois Ant exclut un fichier, aucune inclusion ne le ramènera donc les éléments 2 & 3 me donnent du chagrin d'amour sur la façon de faire l'ensemble de fichiers. Comment puis-je exclure tous mes adaptateurs clients, mais pas l'adaptateur client abstrait? Je ne peux pas exclure les classes XZYCustomerAdapter sans exclure AbstractCustomerAdapter.

Eh bien, au moins je ne peux pas comprendre un, mais nous espérons de vous Stack Overflow est plus intelligent Denizens que moi :)

Répondre

45

La plupart des tâches acceptant un seul ensemble de fichiers peuvent également accepter plusieurs ensembles de fichiers.

<jar file="..."> 
    <fileset dir="classes"> 
    <exclude name="com/foo/bar/**"/> 
    </fileset> 

    <fileset dir="classes"> 
    <include name="com/foo/bar/AbstractCustomerAdapter.class"/> 
    <include name="com/foo/bar/CustomerAdapterFactory.class"/> 
    </fileset> 
</jar> 
+0

Doux, cela fonctionne! –

0

Ecrire un custom selector. L'API est facile à mettre en œuvre. Là, vous avez tout le pouvoir de Java dont vous avez besoin pour décider.

+0

Oui, je suis vraiment essayer d'éviter un sélecteur personnalisé simplement pour surmonter le manque de Ant regex ... :(. Si je dois aller dans cette voie, je vais juste liste à la main les 50 fichiers ou si je besoin d'exclure, laid comme c'est –

1

J'ai deux choses différentes que je fais dans différents endroits. Parfois, je copie des fichiers vers un emplacement temporaire afin que je puisse tout inclure plausible en une étape et exclure certains éléments spécifiques dans une étape ultérieure. D'autres fois, j'utilise deux déclarations distinctes. Vous ne semblez pas avoir besoin des fichiers temporaires, mais pour transformer certains fichiers texte en ligne PC avant de construire une installation, je copie et convertis tout (en utilisant fixcrlf) correspondant à un répertoire temporaire, puis je choisis et choisissez des fichiers pour différentes plates-formes à partir de la hiérarchie créée. Lors de la création de fichiers tar, il suffit de pouvoir inclure un fichier spécifique sur une ligne et d'exclure le motif sur une ligne ultérieure incluant d'autres fichiers.

<tarfileset dir="classes" includes="classes" excludes="classes/com/foo/bar" />
<tarfileset dir="classes" includes="classes/com/foo/bar/AbstractCustomerAdapter.class,classes/com/foo/bar/CustomerAdapterFactory.class" />

Si les fichiers Jar ne sont pas construits comme le goudron et les fichiers zip, vous devrez peut-être construire la hiérarchie des fichiers explicitement comme je le fais avec fixcrlf et construire le fichier jar dans une deuxième passe de la hiérarchie corrigée .

Questions connexes