9

Antビルドスクリプトからソースファイルの数値をインクリメントする必要があります。タスクを使用してインクリメントする番号を見つけることができますが、属性ReplaceRegExp内でその番号をインクリメントするにはどうすればよいですか?replace

これが私がこれまでに得たものです:

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

replace属性で、どうすればよいですか

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

buildnumber同じビルドターゲット内ですでに値を使用しているため、タスクを使用して値をファイルに保存することはできません。プロパティをインクリメントできる別のantタスクはありますか?

4

3 に答える 3

4

次のようなものを使用できます。

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

したがって、ant タスクはプロパティファイルです。

于 2008-09-25T12:55:51.320 に答える
4

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>
于 2008-09-25T16:59:52.370 に答える
0

良い質問です。これと同じように perl で実行できますが、ant、.NET、およびその他の分野では不可能だと思います。間違っている場合は、本当に知りたいです。あなたが言及したような状況で実際に使用できるPerlで何度も使用しました。

于 2008-09-25T12:58:20.893 に答える