2009-03-03 3 views
19

У меня есть набор файлов (который возвращается из задачи Maven Ant) и содержит все банки, которые мне нужно переупаковать. Этот набор файлов ссылается на refid. Я только хочу включить свои собственные банки, поэтому я хотел бы отфильтровать это. Но наборы файлов Ant не поддерживают никаких дополнительных атрибутов или вложенных тегов, если используется refid.Отфильтровать набор файлов, на который ссылается с помощью refid

Например, если набор файлов:

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

, и я хочу, чтобы иметь набор файлов, который содержит только

org.foo*.jar 

Как бы мне это сделать?

ответ

27

Попробуйте использовать коллекцию ресурсов restrict, которую вы можете использовать как fileset в любой задаче, которая использует коллекции ресурсов для выбора групп файлов для работы.

Например, для fileset вернулся из вашего Maven задачи ссылочной через ид под названием dependency.fileset вы можете объявить сбор в restrict ресурсов следующим образом:

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

Примечания вы должны объявить пространство имен селектора ресурсов, как она не является частью встроенного в Ant имен:

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

здесь вы можете ссылаться на свой restrict сбор ресурсов аналогичным образом, как вы бы ссылаться на свой fileset. Например, чтобы создать резервные копии отфильтрованного набора файлов:

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

Конечно, вы можете INLINE своей коллекции restrict ресурса, если вам так хочется:

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

Посмотри на Ant документации по resource collections для дополнительной информации.

+2

Хорошие примеры использования ресурсов. Я думаю, что примеры в документах Ant могут быть улучшены, поэтому это очень полезно. – Trenton

+0

Саймон, БОЛЬШОЕ СПАСИБО! – t0r0X

1

Думаю, вам понадобится написать муравьиную задачу для этого. Их довольно легко написать.

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

В вашей задаче, вам нужно позвонить getProject() и попросите его дать вам набор файлов, пройти через него, и создать новый.

1

Если вы используете достаточно недавнюю версию Ant и JDK, например Ant 1.7 и JDK 6, то вы можете использовать optional script task, чтобы делать то, что вы хотите. (Более ранние версии также могут работать.) Страница, с которой я связан, если вы прокрутите вниз до текста «Цель состоит в том, чтобы отобразить файлы», то вы увидите образец сценария, который создает набор файлов.

Это не для слабонервных, и пользовательская задача муравья, которую вы пишете, вероятно, будет более гибкой. Но я хотел указать на этот вариант.

1

Я использую Ant с Ivy. С помощью Ivy можно фильтровать зависимости для поиска, с помощью следующего кода в 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"/> 

Может быть, быстрый взгляд на источнике Ivy поможет?

Смежные вопросы