Как я могу изменить значения свойств в файле, используя Ant? - PullRequest
10 голосов
/ 10 марта 2010

Пример ввода:

SERVER_NAME=server1
PROFILE_NAME=profile1
...

Пример вывода:

SERVER_NAME=server3
PROFILE_NAME=profile3
...

Этот файл будет использоваться в applicationContext.xml. Я пробовал

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

но это не работает.

Ответы [ 2 ]

15 голосов
/ 10 марта 2010

Ваш filterchain в порядке, но ваш исходный файл должен выглядеть следующим образом:

SERVER_NAME=@SERVER_NAME@
PROFILE_NAME=@PROFILE_NAME@

Этот код (предоставленный вами)

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

заменяет токены и дает вам

SERVER_NAME=server2
PROFILE_NAME=profi

Если вы хотите сохранить исходный файл в том виде, в каком он у вас есть сейчас, можно использовать 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>

Это заменит каждую строку, начинающуюся с SERVER_NAME= на SERVER_NAME=server2 (то же самое для PROFILE_NAME=). Это вернет вам вывод, который вы описали.

[ \t]* - игнорировать пробелы.

7 голосов
/ 13 февраля 2014

Более чистое решение использует муравьиную задачу "propertyfile" - см. 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...