Question

Je voudrais écrire un script de compilation générique Ant avec une tâche <copy> qui pourrait éventuellement renommer les fichiers en fonction des expressions rationnelles. Un <regexpmapper> imbriqué chargerait les motifs d'un changement de nom propriétés spécifiques du projet fichiers si elle existe.

Quelqu'un at-il déjà fait ceci ou dois-je écrire un propre mappeur?

Était-ce utile?

La solution

Voici un exemple de la façon dont vous pourriez le faire.

Propriétés du projet fichier proj_props.txt contient:

use.filter=regexp.mapper
from.regexp=(.*)_test(.*)
to.regexp=\\1\\2

(Notez les évasions \ dans la chaîne à.)

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>

Vous définissez quelques cas filtermapper , qui réalise une expression rationnelle remplaçons basée sur les propriétés du fichier de propriétés du projet, l'autre qui ne fait rien. La propriété use.filter décide qui obtient choisi. Si le ne serait pas définie ne fichier de propriétés du projet existent use.filter, de sorte que l'identité « ne rien faire » filtermapper sera utilisé.

Notez que cela ne fonctionne que lorsque vous utilisez des ressources imbriquées dans la tâche copy. Si vous avez un seul fichier à copier, et l'utilisation <copy file="...", le filtermapper est ignoré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top