Pergunta

Eu tenho um conjunto de arquivos (que é devolvido a partir da tarefa Maven Ant), e contém todos os frascos que eu preciso para embalar. Este conjunto de arquivos é referenciado por um refid. Eu só quero incluir nossos próprios frascos, então eu gostaria de filtrar isso. Mas filesets Ant não suportam quaisquer outros atributos ou tags aninhadas se um refid é usado.

Por exemplo, se o conjunto de arquivos é:

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

e eu quero ter um conjunto de arquivos que contém apenas

org.foo*.jar

Como eu faria isso?

Foi útil?

Solução

Tente usar um restrict coleção de recursos, que você pode usar como um fileset em qualquer tarefa que coleções de recursos usos para selecionar os grupos de arquivos para operar.

Por exemplo, para um fileset retornou de sua tarefa Maven referenciada através de um ID de chamada dependency.fileset você pode declarar uma coleção de recursos restrict assim:

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

Note que você terá que declarar o namespace selector de recursos, uma vez que não faz parte do built-in Ant namespace:

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

A partir daqui você pode fazer referência a sua coleção de recursos restrict em uma forma similar a como você faria referência a sua fileset. Por exemplo, para criar backups do seu conjunto filtrado de arquivos:

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

Claro que você pode in-line a sua coleção de recursos restrict, se assim desejar:

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

Tenha uma olhada na documentação Formiga em coleções de recursos para posterior informações.

Outras dicas

Eu acho que você precisa escrever uma tarefa Ant para isso. Eles são muito fáceis de escrever embora.

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

Na sua tarefa, você precisa chamar getProject () e pedir-lhe para dar-lhe o conjunto de arquivos, atravessá-la e criar uma nova.

Eu estou usando Ant com Ivy . Com a ajuda de Ivy é possível dependências de filtro para recuperação, com o seguinte código no 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"/>

Talvez um rápido olhar para a fonte Ivy 'ajuda ll?

Se você estiver usando uma versão suficientemente recente do Ant e do JDK, por exemplo, Ant 1.7 e JDK 6, então você pode usar o script opcional tarefa para fazer o que quiser. (As versões anteriores também podem trabalho.) A página que eu ligado, se você rolar para o texto "O objetivo é listar os filesizes" então você verá um exemplo de script que cria um conjunto de arquivos.

Isto não é para os fracos de coração, e uma tarefa personalizada do Ant que você escreve-se, provavelmente, será mais flexível. Mas eu queria salientar a opção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top