Comment puis-je exécuter des fonctions mathématiques dans la tâche Ant 'ReplaceRegExp'?
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é?
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.