Замена всех токенов на основе файла свойств с помощью ANT - PullRequest
13 голосов
/ 22 декабря 2010

Я почти уверен, что это простой вопрос, на который я отвечал, и я видел, что он задавался раньше, просто не было твердых ответов.

У меня есть несколько файлов свойств, которые используются для разных сред, например, xxxx-dev, xxxx-test, xxxx-live

Файлы свойств содержат что-то вроде:

server.name=dummy_server_name
server.ip=127.0.0.1

Файлы шаблонов, которые я использую, выглядят примерно так:

<...>
   <server name="@server.name@" ip="@server.ip@"/>
</...>

Вышеприведенный пример является действительно примитивным, но мне интересно, есть ли способ просто сказать ANT заменить все токены на основе файла свойств, вместо того, чтобы жестко кодировать строку токена для каждого ... т.е. 1011 *

<replacetokens>
   <token key="server.name" value="${server.name}"/>
   <token key="server.ip" value="${server.ip}"/>
</replacetokens>

Любая помощь будет отличной!

Ответы [ 2 ]

16 голосов
/ 22 декабря 2010

Вы можете указать файл свойств, из которого нужно прочитать список токенов для задачи replace ', используя replacefilterfile:

<replace file="input.txt" replacefilterfile="properties.txt"/>

Аналогично, в цепочке фильтровВы можете использовать 'replacetokens' propertyfile:

Это будет рассматривать каждую запись файла свойств в sample.properties как пару токен / ключ:

<loadfile srcfile="${src.file}" property="${src.file.replaced}">
  <filterchain>
    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
      <param type="propertiesfile" value="sample.properties"/>
    </filterreader>
  </filterchain>
</loadfile>
2 голосов
/ 30 марта 2016

С задачей замены я пропустил разделители @ вокруг токенов, поэтому нашел следующее решение. Вы можете использовать любое свойство муравья в файле шаблона

<project name="replace" default="replace">

<property file="build.properties" />
<target name="replace">

    <!-- create temp file with properties -->
    <tempfile property="temp.replace" suffix=".properties"/>
    <echoproperties destfile="${temp.replace}" />
    <!-- replace name=value with @name@=value -->
    <replaceregexp file="${temp.replace}" match="([^=]*)=" replace="@\1@=" byline="true" />

    <!-- copy template and replace properties -->
    <copy file="template.txt" tofile="replaced.txt" />
    <replace file="replaced.txt" replacefilterfile="${temp.replace}" />

</target>

с шаблоном

ANT home @ant.home@
ANT version @ant.java.version@
server name @server.name@ ip @server.ip@

это приводит к

ANT home /usr/share/ant
ANT version 1.7
server name dummy_server_name ip 127.0.0.1
...