Фильтровать набор файлов, на который ссылается refid - PullRequest
20 голосов
/ 03 марта 2009

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

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

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

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

org.foo*.jar

Как бы я это сделал?

Ответы [ 4 ]

27 голосов
/ 16 марта 2009

Попробуйте использовать коллекцию ресурсов 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>

Конечно, вы можете встроить свою коллекцию ресурсов restrict, если захотите:

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

Для получения дополнительной информации ознакомьтесь с документацией Ant по коллекциям ресурсов .

1 голос
/ 03 марта 2009

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

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

1 голос
/ 16 марта 2009

Я использую 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 поможет?

1 голос
/ 03 марта 2009

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

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

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

...