ant - Filtrar un conjunto de archivos al que se hace referencia usando un refid
fileset (4)
Creo que necesitarás escribir una tarea de hormigas para eso. Aunque son bastante fáciles de escribir.
Consulte http://ant.apache.org/manual/develop.html#writingowntask
En tu tarea, deberás llamar a getProject () y pedirle que te proporcione el conjunto de archivos, recorrerlo y crear uno nuevo.
Tengo un conjunto de archivos (que se devuelve de la tarea de Maven Ant) y contiene todos los archivos que necesito volver a empaquetar. Este conjunto de archivos es referenciado por un refid. Solo quiero incluir nuestros propios frascos, así que me gustaría filtrar eso. Pero los conjuntos de archivos Ant no admiten ningún otro atributo o etiquetas anidadas si se utiliza un refid.
Por ejemplo, si el conjunto de archivos es:
org.foo.1.jar
org.foo.2.jar
log4j.jar
y quiero tener un conjunto de archivos que contiene sólo
org.foo*.jar
¿Como podría hacerlo?
Estoy usando Ant con Ivy . Con la ayuda de Ivy es posible filtrar las dependencias para su recuperación, con el siguiente código en 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"/>
Tal vez un vistazo rápido a la fuente de Ivy ayudará?
Intente usar una colección de recursos restrict
, que puede usar como un conjunto de fileset
en cualquier tarea que use colecciones de recursos para seleccionar los grupos de archivos para operar.
Por ejemplo, para un conjunto de fileset
devuelto desde su tarea de Maven a la que se hace referencia a través de un id llamado dependency.fileset
, puede declarar una colección de recursos restrict
, como por ejemplo:
<restrict id="filtered.dependencies">
<fileset refid="dependency.fileset"/>
<rsel:name name="org.foo*.jar"/>
</restrict>
Tenga en cuenta que deberá declarar el espacio de nombres del selector de recursos ya que no forma parte del espacio de nombres Ant integrado:
<project xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">
...
</project>
Desde aquí puede hacer referencia a su colección de recursos restrict
manera similar a como haría referencia a su conjunto de fileset
. Por ejemplo, para crear copias de seguridad de su conjunto de archivos filtrados:
<copy todir=".">
<restrict refid="filtered.dependencies"/>
<globmapper from="*" to="*.bak"/>
</copy>
Por supuesto, puede integrar su colección de recursos restrict
si así lo desea:
<copy todir=".">
<restrict>
<fileset refid="dependency.fileset"/>
<rsel:name name="org.foo*.jar"/>
</restrict>
<globmapper from="*" to="*.bak"/>
</copy>
Eche un vistazo a la documentación de Ant sobre colecciones de recursos para obtener más información.
Si está utilizando una versión suficientemente reciente de Ant y JDK, por ejemplo, Ant 1.7 y JDK 6, entonces puede usar la tarea de script opcional para hacer lo que quiera. (Las versiones anteriores también pueden funcionar.) La página a la que me he vinculado, si se desplaza hacia abajo hasta el texto "El objetivo es enumerar los tamaños de archivo", verá un script de ejemplo que crea un conjunto de archivos.
Esto no es para los débiles de corazón, y una tarea de hormigas personalizada que usted mismo escriba será probablemente más flexible. Pero quería señalar la opción.