Domanda

Vorrei scrivere uno script generico Ant con un compito <copy> che potrebbe eventualmente rinominare i file in base alle espressioni regolari. Un <regexpmapper> nidificato caricherebbe i modelli di ridenominazione da un progetto specifico file di proprietà, se esiste.

Qualcuno ha già fatto questo o devo scrivere una propria mapper?

È stato utile?

Soluzione

Ecco un esempio di come si potrebbe fare questo.

Proprietà progetto file di proj_props.txt contiene:

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

(Notare le fughe \ nella stringa.)

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>

Si definisce un paio di casi filtermapper , uno che svolge un'espressione regolare replace basa sulle proprietà del file di proprietà del progetto, l'altro che non fa nulla. La proprietà use.filter decide che viene scelto. Se il file delle proprietà del progetto non esiste use.filter non sarebbe stato impostato, in modo verrà utilizzato il filtermapper identita 'do-nothing'.

Si noti che questo funziona solo quando si utilizza risorse nidificati nel compito copy. Se si dispone di un solo file da copiare, e l'uso <copy file="...", il filtermapper viene ignorato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top