Pregunta

Me gustaría escribir un guión genérico de construcción de hormigas con un <copy> Tarea que opcionalmente podría cambiar el nombre de los archivos en función de REGEXPS. Un anidado <regexpmapper> Cargaría los patrones de cambio de nombre de los archivos de propiedades específicas del proyecto si existe.

¿Alguien ya ha hecho esto o tengo que escribir un propio mapeador?

¿Fue útil?

Solución

Aquí hay un ejemplo de cómo podría hacer esto.

Archivo de propiedades del proyecto proj_props.txt contiene:

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

(Tenga en cuenta las escapadas \ en la cadena.)

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>

Defines un par de filtermapper instancias, una que lleva a cabo un regexp reemplazar según las propiedades del archivo de propiedades del proyecto, el otro que no hace nada. los use.filter La propiedad decide cuál es elegida. Si el archivo de propiedades del proyecto no existe use.filter No se establecería, por lo que se utilizará el FilterMapper de identidad de 'no hacer nada'.

Tenga en cuenta que esto solo funciona cuando se usa recursos anidados en el copy tarea. Si solo tiene un archivo para copiar y usar <copy file="...", se ignora el FilterMapper.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top