一、概述
replace是ant内置任务,用于将选择的文件中出现的指定字符串替换为另一个字符串。如果要替换跨行的文本,必须嵌套replacetoken元素。当与存在的文件不同时,才会写入输出文件,以此防止此任务基于未变更的文件进行伪重建。replace形成了一个隐式文件集,支持fileset的大多数属性以及嵌套include、exclude、patternset元素。ant1.8起,replace支持嵌套任何基于文件系统的资源集合。
二、属性
file:要进行替换的文件。
dir:替换多个文件时使用的基本目录。
encoding:进行替换的文件编码,默认为JVM编码。
token:要替换掉的字符串。
value:替换成的字符串,如果不设置,默认为空字符串“”。
summary:是否生成替换操作的摘要,详细说明处理了多少字符串和文件,默认不生成摘要。
propertyFile:描述嵌套replacefilter元素指定的属性的属性文件,当replacefilter元素使用property属性时必须设置。
replacefilterfile:属性文件,每一个属性都视为一个replacefilter,属性名是token,属性值是value。
includes:逗号或空格分隔的必须包含的文件模式列表。
includesfile:文件名。指定文件的每一行都会做为一个includes模式。
excludes:逗号或空格分隔的必须排除的文件模式列表。
excludesfile:文件名。指定文件的每一行都会做为一个excludes模式。
defaultexcludes:是否使用默认排除列表,默认为true。
preserveLastModified:ant1.8起,是否保留时间戳,即使文件被修改,默认为false。
failOnNoReplacements:ant1.8起,如果没有做任何事是否构建失败,默认为false。
replace还支持以下嵌套元素:
replacetoken/replacevalue:如果要替换的文本或替换文本跨行,可以使用这两个嵌套元素来分别指定。支持以下属性:
expandProperties:ant1.8起,是否扩展嵌套文本中的属性,默认为false。
replacefilter:使用replacefilter元素,可以从属性文件中提取替换值,属性文件的名字通过replace任务的propertyFile属性设置。支持以下属性:
token:要替换掉的字符串。
value:替换成的字符串。
property:用其值作为替换值的属性名。property与value不能同时指定。ant1.8起,token、value属性可以作为replacefilter的嵌套元素使用。如果value和property都没有设置,就使用replace的value属性值或者replacevalue元素的值。如果这些都没有设置,那么就用空字符串进行替换。
三、简单示例
<project>
<replace file="test.txt" value="defaultvalue" propertyfile="test.properties">
<replacefilter token="testnotsetvalue"/>
<replacefilter token="testsetvalue" value="value1"/>
<replacefilter token="testvaluefromproperty" property="key"/>
<replacefilter>
<replacetoken expandProperties="true">replacemulti${line.separator}line</replacetoken>
<replacevalue expandProperties="true">replacetovaluemulti${line.separator}line</replacevalue>
</replacefilter>
</replace>
</project>