Wie kann ich mathematische Funktionen in dem Ant ‚ReplaceRegExp‘ Aufgabe erfüllen?

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

  •  02-07-2019
  •  | 
  •  

Frage

Ich brauche eine Nummer in einer Quelldatei von einem Ant-Build-Skript zu erhöhen. Ich kann die ReplaceRegExp Aufgabe verwenden, um die Nummer, die ich zu erhöhen, wollen zu finden, aber wie kann ich erhöhen Sie diese Zahl innerhalb des replace Attribut?

Heres, was ich bisher habe:

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

Im Attribute ersetzen, wie würde ich tun

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

Ich kann die buildnumber Aufgabe verwenden Sie den Wert in einer Datei zu speichern, da ich bereits innerhalb des gleichen Build-Ziel bin mit, dass. Gibt es eine andere Ameise Aufgabe, die mir erlauben, eine Eigenschaft zu erhöhen?

War es hilfreich?

Lösung

Sie können mit so etwas wie:

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

so die Ameise Aufgabe ist Property.

Andere Tipps

In Ameise, du hast immer den Fehler „Skript“ Tag für kleine Fälle wie dieser bekommt, die nicht ganz fit in die Form. Hier ist eine schnelle (chaotisch) Umsetzung der oben:

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

Gute Frage, es kann ähnlich wie in Perl getan werden, aber ich denke, es ist nicht möglich, in ant, .NET und in anderen Bereichen .. Wenn ich falsch bin, ich würde wirklich gerne wissen, denn das ist ein cool Konzept, das ich in Perl oft benutzt habe, dass ich wirklich in Situationen nutzen könnte, wie Sie erwähnt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top