Ответ 1
Для этого вы можете использовать набор файлов selectors. Селекторы позволяют выбирать файлы на основе контента, размера, редактируемости и т.д. Вы можете комбинировать селекторов с включенными именами и исключать или использовать шаблоны.
Ниже приведен пример. Второй набор файлов получен из первого, с селектором, который просто совпадает с содержимым файла. Для более сложного соответствия существует селектор containsregexp
. Результатом является набор файлов, содержащий только файлы, соответствующие строке. Затем сбойная задача с условием resourcecount
используется для сбоя сборки, если только этот набор файлов не пуст.
<property name="src.dir" value="src" />
<property name="search.string" value="BAD" />
<fileset id="existing" dir="${src.dir}">
<patternset id="files">
<!-- includes/excludes for your source here -->
</patternset>
</fileset>
<fileset id="matches" dir="${src.dir}">
<patternset refid="files" />
<contains text="${search.string}" />
</fileset>
<fail message="Found '${search.string}' in one or more files in '${src.dir}'">
<condition>
<resourcecount when="greater" count="0" refid="matches" />
</condition>
</fail>
(Старый ответ): Если настройка или повторное использование наборов файлов может быть проблематичной, вот иллюстрация относительно простой альтернативы.
Идея состоит в том, чтобы сделать копию файлов,
затем замените строку, которую вы хотите найти
с некоторым значением флага в скопированных файлах.
Это обновит последнее измененное время на любом соответствующем файле.
Задача uptodate
может быть использована для поиска затронутых файлов.
Наконец, если файлы не совпадают, вы можете fail
построить.
<property name="src.dir" value="src" />
<property name="work.dir" value="work" />
<property name="search.string" value="BAD" />
<delete dir="${work.dir}" />
<mkdir dir="${work.dir}" />
<fileset dir="${src.dir}" id="src.files">
<include name="*.txt" />
</fileset>
<copy todir="${work.dir}" preservelastmodified="true">
<fileset refid="src.files" />
</copy>
<fileset dir="${work.dir}" id="work.files">
<include name="*.txt" />
</fileset>
<replaceregexp match="${search.string}"
replace="FOUND_${search.string}">
<fileset refid="work.files" />
</replaceregexp>
<uptodate property="files.clean">
<srcfiles refid="work.files" />
<regexpmapper from="(.*)" to="${basedir}/${src.dir}/\1" />
</uptodate>
<fail message="Found '${search.string}' in one or more files in dir '${src.dir}'"
unless="files.clean" />