Ant Regexp Mapper: ¿Patrones de lectura de un archivo?
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?
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.