Отфильтруйте набор файлов, на который ссылается использование refid
У меня есть набор файлов (который возвращается из задачи Maven Ant), и он содержит все банки, которые мне нужно переупаковать. Этот набор файлов ссылается на refid. Я только хочу включить свои собственные банки, поэтому я хотел бы отфильтровать это. Но Ant наборы файлов не поддерживают никаких дополнительных атрибутов или вложенных тегов, если используется refid.
Например, если набор файлов:
org.foo.1.jar
org.foo.2.jar
log4j.jar
и я хочу иметь набор файлов, содержащий только
org.foo*.jar
Как мне это сделать?
Ответы
Ответ 1
Попробуйте использовать коллекцию ресурсов 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 в коллекции ресурсов для получения дополнительной информации.
Ответ 2
Думаю, вам нужно написать задачу ant для этого. Их довольно легко написать.
См. http://ant.apache.org/manual/develop.html#writingowntask
В вашей задаче вам нужно вызвать getProject() и попросить его предоставить вам набор файлов, пройти через него и создать новый.
Ответ 3
Если вы используете достаточно недавнюю версию Ant и JDK, например, Ant 1.7 и JDK 6, вы можете использовать необязательная script задача, чтобы делать то, что вы хотите. (Более ранние версии также могут работать.) Страница, с которой я связан, если вы прокрутите вниз до текста "Цель состоит в том, чтобы отобразить файлы", то вы увидите образец script, который создает набор файлов.
Это не для слабонервных, и пользовательская задача Ant, которую вы пишете, вероятно, будет более гибкой. Но я хотел указать на вариант.
Ответ 4
Я использую 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 поможет?