2008-09-25 13 views
9

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 deseo incrementar, pero ¿cómo puedo incrementar ese número dentro del atributo replace?¿Cómo puedo llevar a cabo funciones matemáticas en la tarea Ant 'ReplaceRegExp'?

Esto es 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 sustituir, ¿cómo lo haría

replace="MY_PROPERTY = (\1 + 1);" 

no puedo utilizar la tarea buildnumber para almacenar el valor de una archivo ya que estoy usando eso dentro del mismo objetivo de compilación. ¿Hay otra tarea de hormiga que me permita incrementar una propiedad?

+0

Elimina la etiqueta '' expresiones regulares- –

Respuesta

4

Usted puede usar algo como:

<propertyfile file="${version-file}"> <entry key="revision" type="string" operation="=" value="${revision}" /> <entry key="build" type="int" operation="+" value="1" />

por lo que la tarea de hormiga es propertyfile.

0

Buena pregunta, se puede hacer en perl similar a eso, pero creo que no es posible en hormiga, .NET y otras áreas .. Si estoy equivocado, me gustaría saberlo, porque es un concepto genial que he usado en Perl muchas veces que realmente podría usar en situaciones como las que has mencionado.

4

En la hormiga, siempre tienes la etiqueta de "script" alternativa para casos pequeños como este que no encajan del todo en el molde. Aquí hay una (desordenado) la implementación rápida 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> 
+0

no vienen a través de la etiqueta script antes, gracias por señalarlo! Creo que usar el es mejor. – roryf

Cuestiones relacionadas