10 Stimmen

Wie kann ich mit Ant Eigenschaftswerte in einer Datei ändern?

Beispiel Eingabe:

SERVER_NAME=server1
PROFILE_NAME=profile1
...

Beispielhafte Ausgabe:

SERVER_NAME=server3
PROFILE_NAME=profile3
...

Diese Datei wird in applicationContext.xml . Ich habe versucht

<copy file="${web.dir}/jexamples.css_tpl"
         tofile="${web.dir}/jexamples.css" >
    <filterchain>
       <replacetokens>
            <token key="SERVER_NAME" value="server2"/>
            <token key="PROFILE_NAME" value="profi"/>

        </replacetokens>
    </filterchain>
</copy>

aber es funktioniert nicht.

15voto

Peter Lang Punkte 52229

Ihr filterchain ist in Ordnung, aber Ihre Quelldatei sollte wie folgt aussehen:

SERVER_NAME=@SERVER_NAME@
PROFILE_NAME=@PROFILE_NAME@

Dieser Code (wie von Ihnen bereitgestellt)

<copy file="${web.dir}/jexamples.css_tpl"
         tofile="${web.dir}/jexamples.css" >
    <filterchain>
       <replacetokens>
            <token key="SERVER_NAME" value="server2"/>
            <token key="PROFILE_NAME" value="profi"/>
        </replacetokens>
    </filterchain>
</copy>

ersetzt die Spielsteine und gibt Ihnen

SERVER_NAME=server2
PROFILE_NAME=profi

Wenn Sie Ihre ursprüngliche Datei in der jetzigen Form beibehalten wollen, können Sie replaceregex :

<filterchain>
  <tokenfilter>
    <replaceregex pattern="^[ \t]*SERVER_NAME[ \t]*=.*$"
                  replace="SERVER_NAME=server2"/>
    <replaceregex pattern="^[ \t]*PROFILE_NAME[ \t]*=.*$"
                  replace="PROFILE_NAME=profi"/>
  </tokenfilter>
</filterchain>

Dies würde jede Zeile ersetzen, die mit SERVER_NAME= von SERVER_NAME=server2 (dasselbe gilt für PROFILE_NAME= ). Damit erhalten Sie die von Ihnen beschriebene Ausgabe.

[ \t]* ist es, Leerzeichen zu ignorieren.

8voto

Jakub Punkte 2284

Eine sauberere Lösung ist die Verwendung des Ant-Tasks "propertyfile" - siehe http://ant.apache.org/manual/Tasks/propertyfile.html

<copy file="${web.dir}/jexamples.css_tpl"
     tofile="${web.dir}/jexamples.css" />
<propertyfile file="${web.dir}/jexamples.css">
    <entry key="SERVER_NAME" value="server2"/>
</propertyfile>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X