2009-06-19 12 views
23

Ho un caso in cui non riesco a capire come ottenere Ant per inserire solo i file che voglio in un set di file (perché sulla terra le persone della formica non usavano la regex?).Set di file Tricky Ant (include la maggior parte, ma non tutta la directory)

Ecco la situazione. Ho un sacco di classi sotto la directory delle classi. Voglio:

1) Tutti i file sotto classi,

2), ma non quelli sotto/com/foo/bar

3) Se io voglio/com/foo/bar/AbstractCustomerAdapter .class e CustomerAdapterFactory.class.

I file in/com/foo/bar sono generalmente denominati come FooCustomerAdapter.class.

In breve, creiamo 2 vasi, uno con solo gli adpater specifici del cliente e uno con tutto il resto. Questo ci consente di creare un nuovo adattatore per il cliente e di sostituire solo quel mini-jar. Il set di file sopra che mi sta uccidendo è il "tutto il resto".

Una volta che Ant esclude un file, nessun inclusione lo riporterà così gli articoli 2 & 3 mi stanno dando fastidio su come eseguire il set di file. Come posso escludere tutti i miei adattatori cliente, ma non l'adattatore cliente astratto? Non è possibile utilizzare caratteri jolly compatibili con ant per escludere le classi XZYCustomerAdapter senza escludere AbstractCustomerAdapter.

Beh, almeno io non riesco a capire uno, ma si spera che uno di voi Stack Overflow abitanti è più intelligente di I :)

risposta

45

La maggior parte delle attività che accettano un singolo set di file può anche accettare più set di file.

<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

Dolce, funziona! –

0

Scrivi una custom selector. L'API è facile da implementare. Lì hai tutta la potenza di Java che devi decidere.

+0

Sì, ero davvero cercando di evitare un selettore personalizzato semplicemente per superare la mancanza di espressione regolare di Ant ... :(. Se devo seguire questa strada, mi limiterò a elenco mano i file di 50 o giù di lì ho devi escludere, brutto com'è. –

1

Ho due cose diverse che faccio in posti diversi. A volte copio i file in una posizione temporanea in modo da poter includere tutto plausibile in una fase ed escludere alcuni elementi specifici in un passaggio successivo. Altre volte, uso due dichiarazioni separate.

Non sembra che siano necessari i file temporanei, ma per trasformare alcuni file di testo in una linea PC che termina prima di creare un'installazione, copio e converto tutto (utilizzando fixcrlf) relativo a una directory temporanea, quindi seleziono e scegliere i file per piattaforme diverse dalla gerarchia creata.

Quando si creano file tar, sembra sufficiente essere in grado di includere un file specifico su una riga ed escludere il modello su una riga successiva che include altri file.

<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" />

Se i file Jar non sono costruiti come i file tar e zip, potrebbe essere necessario per costruire il file gerarchia in modo esplicito come faccio con fixcrlf, e costruire il file jar in un secondo passaggio dalla gerarchia corretto .

Problemi correlati