Filtra un set di file a cui fa riferimento utilizzando un refid
Domanda
Ho un set di file (che viene restituito dall'attività Maven Ant) e contiene tutti i barattoli che devo riconfezionare. Questo set di file fa riferimento a un refid. Voglio solo includere i nostri vasetti, quindi vorrei filtrarlo. Ma i set di file Ant non supportano ulteriori attributi o tag nidificati se viene utilizzato un refid.
Ad 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 lo farei?
Soluzione
Prova a utilizzare una risorsa restring
raccolta, che puoi utilizzare come un set di file
in qualsiasi attività che utilizza raccolte di risorse per selezionare i gruppi di file su cui operare.
Ad esempio, per un fileet
restituito dall'attività Maven a cui si fa riferimento tramite un ID chiamato dependency.fileset
è possibile dichiarare una raccolta di risorse restring
in questo modo:
<restrict id="filtered.dependencies">
<fileset refid="dependency.fileset"/>
<rsel:name name="org.foo*.jar"/>
</restrict>
Nota che dovrai dichiarare lo spazio dei nomi del selettore di risorse in quanto non fa parte dello spazio dei nomi Ant incorporato:
<project xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">
...
</project>
Da qui puoi fare riferimento alla tua raccolta di risorse limit
in modo simile a come faresti riferimento al tuo set di file
. Ad esempio, per creare backup del set di file filtrati:
<copy todir=".">
<restrict refid="filtered.dependencies"/>
<globmapper from="*" to="*.bak"/>
</copy>
Ovviamente puoi incorporare la tua raccolta di risorse limit
se lo desideri:
<copy todir=".">
<restrict>
<fileset refid="dependency.fileset"/>
<rsel:name name="org.foo*.jar"/>
</restrict>
<globmapper from="*" to="*.bak"/>
</copy>
Dai un'occhiata alla documentazione di Ant su raccolte di risorse per ulteriori informazioni.
Altri suggerimenti
Penso che dovrai scrivere un'attività formica per quello. Sono abbastanza facili da scrivere però.
Vedi http://ant.apache.org/manual/develop.html# writingowntask
Nella tua attività, dovrai chiamare getProject () e chiedergli di darti il ??set di file, percorrerlo e crearne uno nuovo.
Sto usando Ant con Ivy . Con l'aiuto di Ivy è possibile filtrare le dipendenze per il recupero, con il seguente codice in 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 una rapida occhiata alla fonte Ivy ti aiuterà?
Se si utilizza una versione sufficientemente recente di Ant e JDK, ad esempio Ant 1.7 e JDK 6, è possibile utilizzare attività di script facoltativa per fare ciò che desideri. (Potrebbero funzionare anche le versioni precedenti.) La pagina a cui mi sono collegato, se scorri verso il basso fino al testo "L'obiettivo è elencare le dimensioni dei file" quindi vedrai uno script di esempio che crea un set di file.
Questo non è per i deboli di cuore, e un compito di formica personalizzato che scrivi tu stesso sarà probabilmente più flessibile. Ma volevo sottolineare l'opzione.