2009-03-03 15 views
19

Tengo un conjunto de archivos (que se devuelve de la tarea Maven Ant), y contiene todos los frascos que necesito volver a empaquetar. Este conjunto de archivos es referenciado por un refid. Solo quiero incluir nuestras propias jarras, así que me gustaría filtrar eso. Pero los catálogos de archivos de Ant no admiten ningún atributo adicional o etiquetas anidadas si se utiliza un refid.Filtrar un conjunto de archivos al que se hace referencia utilizando un refid

Por ejemplo, si el conjunto de archivos es:

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

y yo quiero tener un conjunto de archivos que contiene sólo

org.foo*.jar 

¿Cómo iba a hacer eso?

Respuesta

27

Intente utilizar una colección de recursos restrict, que puede usar como fileset en cualquier tarea que use colecciones de recursos para seleccionar los grupos de archivos en los que se va a operar.

Por ejemplo, para un fileset regresar de su tarea Maven referencia a través de un identificador de llamada dependency.fileset puede declarar una colección de recursos restrict así:

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

Nota que tendrá que declarar el espacio de nombres del selector de recursos como que no es parte del espacio de nombres Ant incorporada:

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

Desde aquí se puede hacer referencia a su colección de recursos restrict de una manera similar a como lo haría referencia a su fileset. Por ejemplo, para crear copias de seguridad de su conjunto filtrado de archivos:

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

Por supuesto que puede Inline su colección restrict recurso si así lo desea:

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

echar un vistazo a la documentación Hormiga en resource collections para mayor información.

+2

Buenos ejemplos de uso de recursos. Creo que los ejemplos en los documentos Ant podrían mejorarse, así que esto es muy útil. – Trenton

+0

Simon, ¡GRACIAS GRANDES! – t0r0X

1

Creo que tendrás que escribir una tarea ant para eso. Sin embargo, son bastante fáciles de escribir.

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

En su tarea, tendrá que llamar getProject() y pedirle que le dará el conjunto de archivos, caminar a través de él, y crear una nueva.

1

Si está utilizando una versión suficientemente reciente de Ant y JDK, por ejemplo, Ant 1.7 y JDK 6, puede usar el optional script task para hacer lo que desee. (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 listar los tamaños del archivo", verá una secuencia de comandos de muestra que crea un Conjunto de archivos.

Esto no es para corazones débiles, y una tarea personalizada que usted escriba será probablemente más flexible. Pero quería señalar la opción.

1

Estoy usando Ant con Ivy. Con la ayuda de la hiedra es posible filtrar las dependencias para la 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 rápido vistazo a la fuente de Ivy me ayudas?

Cuestiones relacionadas