Как я могу выполнять математические функции в задаче Ant ReplaceRegExp? - PullRequest
9 голосов
/ 25 сентября 2008

Мне нужно увеличить число в исходном файле из скрипта сборки Ant. Я могу использовать задачу <a href="http://ant.apache.org/manual/Tasks/replaceregexp.html" rel="nofollow noreferrer">ReplaceRegExp</a>, чтобы найти число, которое я хочу увеличить, но как мне затем увеличить это число в атрибуте replace?

Вот что у меня так далеко:

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

В атрибуте замены, как бы я сделал

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

Я не могу использовать задачу buildnumber для сохранения значения в файле, поскольку я уже использую его в той же цели сборки. Есть еще одна задача муравья, которая позволит мне увеличить свойство?

Ответы [ 3 ]

4 голосов
/ 25 сентября 2008

В ant у вас всегда есть запасной тег «script» для таких маленьких случаев, которые не совсем вписываются в форму. Вот быстрая (грязная) реализация вышеупомянутого:

    <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>
4 голосов
/ 25 сентября 2008

Вы можете использовать что-то вроде:

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

поэтому задача муравья - файл свойств.

0 голосов
/ 25 сентября 2008

Хороший вопрос, это можно сделать в Perl, похожем на это, но я думаю, что это невозможно в ant, .NET и других областях. Если я ошибаюсь, я бы очень хотел знать, потому что это круто Концепция, которую я использовал в Perl много раз, которую я мог бы действительно использовать в ситуациях, как вы упомянули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...