¿Cómo puedo llevar a cabo funciones matemáticas en la tarea Ant 'ReemplazarRegExp'?

StackOverflow https://stackoverflow.com/questions/133111

  •  02-07-2019
  •  | 
  •  

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?

¿Fue útil?

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.

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