これを行うには、ファイルセットselectorsを使用して検討するかもしれません。セレクタを使用すると、コンテンツ、サイズ、編集可能性などに基づいてファイルを選択できます。セレクタは、名前ベースのインクルード、除外、またはパターンセットと組み合わせることができます。
以下は例です。 2番目のファイルセットは最初のファイルセットから派生し、セレクタはファイルの内容と単純に一致します。より洗練されたマッチングのために、containsregexp
selectorがあります。結果は、文字列に一致するファイルのみを含むファイルセットです。ファイルセットが空でない限り、resourcecount
conditionの失敗タスクを使用してビルドが失敗します。
<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" />
最初の例では、ネストされたを省略し、属性「を含む」で単に「マッチ」ファイルセットを使用し多少簡潔に行うことができます。 –
@EdRandallあなたは例を挙げて回答を投稿できますか – Moudiz