¿Existe una forma sencilla de tomar el valor de una propiedad y luego copiarlo en otra propiedad con ciertos caracteres reemplazados?
Decir propA=This is a value
. Quiero reemplazar todos los espacios en guiones bajos, lo que da como resultado propB=This_is_a_value
.
defaultValue="${propA}"
es perfecto como búsqueda general / reemplazo de una sola línea: de lo contrario, si no hay coincidencia, no se agrega nada en propB. ¡Gracias!Aquí está la solución sin secuencias de comandos y sin frascos externos como ant-conrib:
El truco consiste en utilizar los recursos de ANT:
Este reemplazará todo "" en propA por "_" y colocará el resultado en propB. "filetokenizer" trata todo el flujo de entrada (nuestra propiedad) como un token y aplica el reemplazo de cadena en él.
Puede hacer otras transformaciones sofisticadas utilizando otros filtros de token: http://ant.apache.org/manual/Types/filterchain.html
fuente
<filetokenizer/>
bit. Su código funciona bien sin él (al menos en Ant v1.8.3).ant
y no requiere bibliotecas adicionales.Si ant-contrib no es una opción, aquí hay una solución portátil para Java 1.6 y posterior:
fuente
replaceAll
función para cadenas. Úselo en subefore.replace( /\s/g, "_" )
lugar.project.getProperty()
devuelve unjava.lang.String
, por lo quereplaceAll()
es apropiado en este caso. Si quisiera usarreplace()
, podría convertir 'antes' a una cadena de JavaScript nativa con:before = new String(before);
project.setNewProperty
sería más portátil, ya quesetProperty
podría sobrescribir el valor de la propiedad anterior. Incluso podría escribir a labefore
propiedad.En caso de que desee una solución que utilice solo elementos integrados de Ant , considere esto:
La salida es
${propB} = "This_is_a_value"
fuente
Use alguna aplicación externa como sed:
Si ejecuta Windows, búsquelo en Google para "gnuwin32 sed".
El comando
s/_/./g
reemplaza todos_
con.
Este script funciona bien en Windows. En linux arg puede ser necesario citar.fuente
Dos posibilidades:
a través de la tarea de script y el motor javascript incorporado (si usa jdk> = 1.6)
o usando el complemento Ant Flaka
para sobrescribir la propiedad existente propA simplemente reemplace propB con propA
fuente
Aquí hay una versión más generalizada de la respuesta de Uwe Schindler :
Puede utilizar a
macrodef
para crear una tarea personalizada.puede usar esto de la siguiente manera:
esto será bastante útil si lo haces varias veces
fuente
Agregar una respuesta un ejemplo más completo sobre una respuesta anterior
fuente
Solo un FYI para la respuesta Reemplazo de caracteres en la propiedad Ant : si está tratando de usar esto dentro de una ejecución maven, no puede hacer referencia a las variables maven directamente. Necesitará algo como esto:
fuente
" "
de"_"
?propATemp
reemplazando<propertyresource name="propATemp"/>
con<string value="${propA}"/>
Las propiedades no se pueden cambiar, pero antContrib vars ( http://ant-contrib.sourceforge.net/tasks/tasks/variable_task.html ) sí.
Aquí hay una macro para hacer una búsqueda / reemplazo en una var:
Luego llame a la macro como:
El código anterior usa javascript dividir y luego unirse, que es más rápido que las expresiones regulares. Las propiedades "locales" se pasan a JavaScript para que no se produzcan fugas de propiedad.
fuente
O ... también puede probar su propia tarea
CÓDIGO JAVA:
ANT SCRIPT
CONSOLA:
fuente