2008-09-25 7 views
9

Je dois incrémenter un nombre dans un fichier source à partir d'un script de construction Ant. Je peux utiliser la tâche ReplaceRegExp pour trouver le numéro que je veux incrémenter, mais comment puis-je incrémenter ce nombre dans l'attribut replace?Comment puis-je effectuer des fonctions mathématiques dans la tâche Ant 'ReplaceRegExp'?

Heres ce que j'ai jusqu'à présent:

<replaceregexp file="${basedir}/src/path/to/MyFile.java" 
    match="MY_PROPERTY = ([0-9]{1,});" 
    replace="MY_PROPERTY = \1;"/> 

Dans le remplacer attribut, comment pourrais-je faire

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

Je ne peux pas utiliser la tâche buildnumber pour stocker la valeur dans un fichier puisque je l'utilise déjà dans la même cible de construction. Y at-il une autre tâche de fourmi qui me permettra d'incrémenter une propriété?

+0

Remove tag « expressions régulières » –

Répondre

4

Vous pouvez utiliser quelque chose comme:

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

donc la tâche de fourmi est propertyfile.

0

Bonne question, cela peut être fait en perl similaire à cela, mais je pense que ce n'est pas possible dans les fourmis, .NET et d'autres domaines .. Si je me trompe, j'aimerais vraiment savoir, parce que c'est un concept cool que j'ai utilisé à Perl plusieurs fois que je pourrais vraiment utiliser dans des situations comme vous l'avez mentionné.

4

Dans ant, vous avez toujours la balise "script" de secours pour les petits cas comme celui-ci qui ne rentrent pas tout à fait dans le moule. Voici une mise en œuvre rapide (désordre) de ce qui précède:

<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

pas venir dans la balise script avant, merci pour le signaler! Je pense que l'utilisation de est meilleure. – roryf

Questions connexes