2010-03-10 2 views
10

Пример входных данных:Как изменить значения свойств в файле с помощью Ant?

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> 

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

ответ

15

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

[email protected][email protected] 
[email protected][email protected] 

Этот код (как это предусмотрено вами)

<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]* - игнорировать пробелы.

+0

является возможностью изменить значение свойства без маркеров @@? – Andrew

+0

Да, см. Мой обновленный ответ. –

+0

Как я могу передать или несколько аргументов муравьям, я не хочу использовать исходные файлы для установки var и значения, которые вы видите 'SERVER_NAME = server2'. Я надеюсь передать аргументы, когда я запустил файл сборки ant в eclipse. – janwen

5

чистый раствор с помощью «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> 
+0

Это решение отлично работает для меня. Я хотел сделать это для файла '.properties' –

+0

Отличное решение. Спасибо – plinyar

Смежные вопросы