¿Cómo puedo llevar a cabo funciones matemáticas en la tarea Ant 'ReemplazarRegExp'?
Pregunta
Necesito incrementar un número en un archivo fuente desde un script de compilación Ant. Puedo usar la tarea ReplaceRegExp
para encontrar el número que quiero incrementar, pero ¿cómo puedo incrementar ese número dentro del atributo replace
?
Heres lo que tengo hasta ahora:
<replaceregexp file="${basedir}/src/path/to/MyFile.java"
match="MY_PROPERTY = ([0-9]{1,});"
replace="MY_PROPERTY = \1;"/>
En el atributo replace, ¿cómo lo haría?
replace="MY_PROPERTY = (\1 + 1);"
No puedo usar la tarea buildnumber
para almacenar el valor en un archivo ya que ya lo estoy usando dentro del mismo objetivo de compilación. ¿Hay otra tarea de hormigas que me permita incrementar una propiedad?
Solución
Puede usar algo como:
<propertyfile file="${version-file}">
<entry key="revision" type="string" operation="=" value="${revision}" />
<entry key="build" type="int" operation="+" value="1" />
así que la tarea ant es el archivo de propiedades.
Otros consejos
En hormiga, siempre tienes el respaldo " script " etiqueta para casos pequeños como este que no encajan en el molde. Aquí hay una implementación rápida (desordenada) de lo anterior:
<property name="propertiesFile" location="test-file.txt"/>
<script language="javascript">
regex = /.*MY_PROPERTY = (\d+).*/;
t = java.io.File.createTempFile('test-file', 'txt');
w = new java.io.PrintWriter(t);
f = new java.io.File(propertiesFile);
r = new java.io.BufferedReader(new java.io.FileReader(f));
line = r.readLine();
while (line != null) {
m = regex.exec(line);
if (m) {
val = parseInt(m[1]) + 1;
line = 'MY_PROPERTY = ' + val;
}
w.println(line);
line = r.readLine();
}
r.close();
w.close();
f.delete();
t.renameTo(f);
</script>
Buena pregunta, se puede hacer en perl similar a eso, pero creo que no es posible en hormiga, .NET y otras áreas ... Si me equivoco, me gustaría saberlo, porque es genial concepto que he usado en Perl muchas veces y que realmente podría usar en situaciones como las que mencionaste.