2009-03-03 14 views
19

Ho un set di file (che viene restituito dall'attività di Maven Ant) e contiene tutti i jar che devo reimballare. Questo set di file è referenziato da un refid. Voglio solo includere i nostri barattoli, quindi mi piacerebbe filtrarlo. Ma i set di file Ant non supportano ulteriori attributi o tag nidificati se viene usato un refid.Filtra un set di file referenziato usando un ref

Per esempio, se il set di file è:

org.foo.1.jar 
org.foo.2.jar 
log4j.jar 

e voglio avere un set di file che contiene solo

org.foo*.jar 

Come dovrei farlo?

risposta

27

Provare a utilizzare una raccolta di risorse restrict, che è possibile utilizzare come un fileset in qualsiasi attività che utilizza raccolte di risorse per selezionare i gruppi di file su cui operare.

Ad esempio, per un fileset tornato da vostro compito Maven fa riferimento tramite un id chiamato dependency.fileset è possibile dichiarare una collezione restrict risorsa in questo modo:

<restrict id="filtered.dependencies"> 
    <fileset refid="dependency.fileset"/> 
    <rsel:name name="org.foo*.jar"/> 
</restrict> 

Nota si dovrà dichiarare il namespace di selezione delle risorse come non fa parte dello spazio dei nomi Ant built-in:

<project xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors"> 
    ... 
</project> 

da qui è possibile fare riferimento la vostra collezione di risorse restrict in un modo simile a come si dovrebbe fare riferimento il vostro fileset. Ad esempio, per creare copie di backup del vostro insieme filtrato di file:

<copy todir="."> 
    <restrict refid="filtered.dependencies"/> 
    <globmapper from="*" to="*.bak"/> 
</copy> 

naturalmente si può Inline tua collezione restrict risorsa se lo desiderano:

<copy todir="."> 
    <restrict> 
     <fileset refid="dependency.fileset"/> 
     <rsel:name name="org.foo*.jar"/> 
    </restrict> 
    <globmapper from="*" to="*.bak"/> 
</copy> 

dare un'occhiata alla documentazione di Formica sul resource collections per maggiori informazioni.

+2

Buoni esempi di utilizzo delle risorse. Penso che gli esempi nei documenti Ant potrebbero essere migliorati, quindi questo è molto utile. – Trenton

+0

Simon, GRANDI GRAZIE! – t0r0X

1

Penso che avrai bisogno di scrivere un compito di formica per quello. Sono abbastanza facili da scrivere però.

Vedi http://ant.apache.org/manual/develop.html#writingowntask

nel vostro compito, è necessario chiamare getProject() e chiedergli di darvi il set di file, a piedi, attraverso di essa, e crearne uno nuovo.

1

Se si utilizza una versione sufficientemente recente di Ant e JDK, ad esempio Ant 1.7 e JDK 6, è possibile utilizzare optional script task per fare ciò che si desidera. (Le versioni precedenti potrebbero anche funzionare.) La pagina a cui mi sono collegato, se si scorre verso il basso fino al testo "L'obiettivo è quello di elencare i filesize", vedrai uno script di esempio che crea un set di file.

Questo non è per i deboli di cuore, e un'attività di formica personalizzata che scrivi tu stesso sarà probabilmente più flessibile. Ma volevo sottolineare l'opzione.

1

Sto usando Ant con Ivy. Con l'aiuto di Ivy è possibile filtrare le dipendenze per il recupero, con il seguente codice nel ivy.xml:

<dependency name="Project1" rev="latest.integration" transitive="true" conf="modlibs"> 
<exclude name="${exclusionRegEx}" matcher="regexp" /> 
</dependency> 
<dependency name="Project2" rev="latest.integration" transitive="false" conf="modules"/> 

Forse un rapido sguardo alla fonte Ivy 'll aiuto?

Problemi correlati