Vous pouvez envisager d'utiliser fileset selectors pour le faire. Les sélecteurs vous permettent de choisir les fichiers en fonction du contenu, de la taille, de la possibilité d'édition, etc. Vous pouvez combiner des sélecteurs avec des inclusions et des exclusions basées sur le nom, ou des jeux de motifs.
Voici un exemple. Le second ensemble de fichiers est dérivé du premier, avec un sélecteur qui correspond simplement au contenu du fichier. Pour une correspondance plus sophistiquée, il y a le containsregexp
selector. Le résultat est un ensemble de fichiers contenant uniquement les fichiers correspondant à la chaîne. Une tâche d'échec avec un resourcecount
condition est ensuite utilisée pour échouer la génération, sauf si cet ensemble de fichiers est vide.
<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>
(Old réponse): Si le réglage ou la réutilisation filesets pourrait être problématique, voici une illustration d'une alternative simple relativement.
L'idée est de faire une copie des fichiers, , puis remplacez la chaîne que vous souhaitez rechercher avec une valeur d'indicateur dans les fichiers copiés. Cela mettra à jour la dernière heure modifiée sur tout fichier correspondant. La tâche uptodate
peut ensuite être utilisée pour rechercher les fichiers affectés. Enfin, sauf si aucun fichier ne correspond, vous pouvez fail
la construction.
<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" />
Le premier exemple peut être fait un peu plus en utilisant de façon concise que l'ensemble de fichiers « correspondances » avec un « comprend » attribut, en omettant le imbriqué . –
@EdRandall pouvez-vous poster une réponse avec un exemple s'il vous plaît – Moudiz