Ant regexp mapper: чтение шаблонов из файла? - PullRequest
1 голос
/ 28 января 2011

Я хотел бы написать общий сценарий сборки Ant с задачей <copy>, которая может при желании переименовывать файлы на основе регулярных выражений.Вложенный <regexpmapper> будет загружать шаблоны переименования из файлов свойств проекта, если он существует.

Кто-то уже сделал это или мне нужно написать собственный картограф?

1 Ответ

1 голос
/ 29 января 2011

Вот пример того, как вы можете это сделать.

Файл свойств проекта proj_props.txt содержит:

use.filter=regexp.mapper
from.regexp=(.*)_test(.*)
to.regexp=\\1\\2

(Обратите внимание на экранирование \ в строке to.)

Buildfile:

<property file="proj_props.txt" />

<!-- filter for regexp -->    
<filtermapper id="regexp.mapper">
    <tokenfilter>
        <replaceregex pattern="${from.regexp}"
                      replace="${to.regexp}" />
    </tokenfilter>
</filtermapper>

<!-- identity filter, used when no regexp needed -->
<filtermapper id="identity.mapper" />

<!-- decide which filter to use -->
<condition property="chosen.mapper"
           value="regexp.mapper" else="identity.mapper">
    <isset property="use.filter" />
</condition>

<copy todir="...">
    <fileset>
       ...
    </fileset>
    <filtermapper refid="${chosen.mapper}" />
</copy>

Вы определяете пару экземпляров filtermapper, один из которых выполняет замену регулярного выражения на основе свойств из файла свойств проекта, другой -это ничего не делаетСвойство use.filter определяет, какой из них будет выбран.Если файл свойств проекта не существует, use.filter не будет задан, поэтому будет использован сопоставитель фильтров идентификации «ничего не делать».

Обратите внимание, что это работает только при использовании вложенных ресурсов в copyзадача.Если у вас есть только один файл для копирования, и вы используете <copy file="...", фильтр сопоставления игнорируется.

...