Comment puis-je exécuter des fonctions mathématiques dans la tâche Ant 'ReplaceRegExp'?

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

  •  02-07-2019
  •  | 
  •  

Question

Je dois incrémenter un nombre dans un fichier source à partir d'un script de génération Ant. Je peux utiliser la tâche ReplaceRegExp pour rechercher le nombre que je veux incrémenter, mais comment puis-je incrémenter ce nombre dans l'attribut replace?

Voici 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 l'attribut replace, comment ferais-je

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

Je ne peux pas utiliser la tâche buildnumber pour stocker la valeur dans un fichier, car 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é?

Était-ce utile?

La solution

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" />

la tâche ant est donc propertyfile.

Autres conseils

Dans Ant, vous avez toujours la solution de secours & "script &"; tag pour petits cas comme celui-ci qui ne rentre pas tout à fait dans le moule. Voici une mise en œuvre rapide (désordonnée) 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>

Bonne question, cela peut se faire en perl, comme cela, mais je pense que ce n’est pas possible dans ant, .NET et d’autres domaines .. Si je me trompe, j’aimerais vraiment savoir, parce que c’est cool concept que j'ai utilisé à plusieurs reprises dans Perl et que je pourrais vraiment utiliser dans des situations comme celle que vous avez évoquée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top