Вы можете использовать для этого набор файлов селекторы .Селекторы позволяют выбирать файлы на основе содержимого, размера, возможности редактирования и так далее.Вы можете комбинировать селекторы с именными включениями и исключениями или наборами шаблонов.
Ниже приведен пример.Второй набор файлов является производным от первого, с селектором, который просто совпадает с содержимым файла.Для более сложного соответствия есть селектор 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" />