Фильтрация набора файлов, на который ссылается, с помощью переопределения

StackOverflow https://stackoverflow.com/questions/607338

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

org.foo*.jar

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

Это было полезно?

Решение

Попробуйте использовать 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 на коллекции ресурсов для дополнительной информации.

Другие советы

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

Видеть http://ant.apache.org/manual/develop.html#writingowntask

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

Я использую Ant с Айви.С помощью 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 поможет?

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top