使用ANT替换基于属性文件的所有令牌
我很确定这是一个简单的问题,我以前也见过有人问过,只是没有确切的答案 我有几个用于不同环境的属性文件,即xxxx dev、xxxx test、xxxx live 属性文件包含以下内容:使用ANT替换基于属性文件的所有令牌,ant,tokenize,Ant,Tokenize,我很确定这是一个简单的问题,我以前也见过有人问过,只是没有确切的答案 我有几个用于不同环境的属性文件,即xxxx dev、xxxx test、xxxx live 属性文件包含以下内容: server.name=dummy_server_name server.ip=127.0.0.1 <...> <server name="@server.name@" ip="@server.ip@"/> </...> 我使用的模板文件类似于: server.nam
server.name=dummy_server_name
server.ip=127.0.0.1
<...>
<server name="@server.name@" ip="@server.ip@"/>
</...>
我使用的模板文件类似于:
server.name=dummy_server_name
server.ip=127.0.0.1
<...>
<server name="@server.name@" ip="@server.ip@"/>
</...>
上面是一个非常简单的例子,但我想知道是否有一种方法可以让ANT根据属性文件替换所有令牌,而不是为每个令牌行硬编码一个令牌行。。。i、 e
<replacetokens>
<token key="server.name" value="${server.name}"/>
<token key="server.ip" value="${server.ip}"/>
</replacetokens>
任何帮助都会很好 您可以指定属性文件,使用
replacefilterfile
从中读取令牌列表:
<replace file="input.txt" replacefilterfile="properties.txt"/>
对于replace任务本身,我忽略了标记周围的@delimiter,因此我提出了以下解决方案。可以使用模板文件中的任何ant属性
<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 /usr/share/ant
ANT version 1.7
server name dummy_server_name ip 127.0.0.1
使用表单,您可以读取令牌表单属性文件,并在多个文件上替换多个令牌
文件夹结构:
ANT
\_ build.xml
\_ environment.properties
\_ server.xml
\_ build
\_ server.xml [replaced with token value]
要替换单一toke,请使用以下选项:
如果您需要属性来自>1个不同的属性文件,是否有办法做到这一点?我知道的唯一方法是创建一个新文件,将文件连接在一起-你知道更好的方法吗?@MarkRhodes-很抱歉延迟。。。我想不出任何东西不等同于连接。但这样做应该足够简单。ReplaceTokes不支持替换的文件集。