Вот пример того, как вы можете это сделать.
Файл свойств проекта 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="..."
, фильтр сопоставления игнорируется.