Ant Regexp Mapper: схемы чтения из файла?
Вопрос
Я хотел бы написать общий сценарий сборки муравья с <copy>
Задача, которая может при желании переименовать файлы на основе REGEXPS. Вложенный <regexpmapper>
Загрузит шаблоны переименования из файлов свойств специфичных для проекта, если он существует.
Кто -то уже сделал это или мне нужно написать собственный Mapper?
Решение
Вот пример того, как вы можете это сделать.
Файл свойств проекта proj_props.txt
содержит:
use.filter=regexp.mapper
from.regexp=(.*)_test(.*)
to.regexp=\\1\\2
(Обратите внимание на побеги \
в строке.)
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="..."
, Filtermapper игнорируется.