Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ANT替换基于属性文件的所有令牌_Ant_Tokenize - Fatal编程技术网

使用ANT替换基于属性文件的所有令牌

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

我很确定这是一个简单的问题,我以前也见过有人问过,只是没有确切的答案

我有几个用于不同环境的属性文件,即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.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不支持替换的文件集。