Replace
是一个基于目录的任务,用于在选定的文件中将给定字符串的出现替换为另一个字符串。
如果要替换跨越行边界的文本,则必须使用嵌套的 <replacetoken>
元素。
只有在输出文件与现有文件不同时才会写入输出文件。这可以防止基于未更改的文件(这些文件已由此任务重新生成)的虚假重建。
属性 | 描述 | 必需 |
---|---|---|
file | 应替换标记的文件。 | 两者之一必须存在 |
dir | 在多个文件中替换标记时使用的基本目录。 | |
encoding | replace 操作所基于文件的编码。 | 否;默认为默认 JVM 字符编码 |
token | 必须替换的标记。 | 是,除非使用嵌套的 replacetoken 元素或 replacefilterfile 属性。 |
value | 标记的新值。 | 否;默认为空字符串 () |
summary | 指示是否应生成替换操作的摘要,详细说明处理了多少个标记出现次数和文件 | 否;默认为不生成摘要 |
propertyFile | 有效的属性文件,从中提取使用嵌套的 <replacefilter> 元素指定的属性。 |
是,仅当 <replacefilter> 的 property 属性被使用时。 |
replacefilterfile | 有效的属性文件。每个属性将被视为一个 replacefilter ,其中 token 是属性的名称,value 是属性的值。 |
否 |
includes | 必须包含的文件模式的逗号或空格分隔列表。 | 否;默认为全部 (**) |
includesfile | 文件名。此文件的每一行都被视为一个包含模式 | 否 |
excludes | 必须排除的文件模式的逗号或空格分隔列表。 | 否;默认为默认排除项,如果 defaultexcludes 为 no,则为无 |
excludesfile | 文件名。此文件的每一行都被视为一个排除模式 | 否 |
defaultexcludes | 指示是否应使用默认排除项 (yes|no)。 |
否;默认为 yes |
preserveLastModified | 即使文件被修改,也要保留文件时间戳。自 Apache Ant 1.8.0 起。 | 否;默认为 false |
failOnNoReplacements | 如果任务没有执行任何操作,是否应使构建失败。自 Ant 1.8.0 起。 | 否;默认为 false |
<replace file="${src}/index.html" token="@@@" value="wombat"/>
将文件 ${src}/index.html 中的字符串 @@@
的出现次数替换为字符串 wombat
。
此任务形成一个隐式的 FileSet,并支持 <fileset>
的大多数属性以及嵌套的 <include>
、<exclude>
和 <patternset>
元素。
自 Ant 1.8.0 起,此任务支持任何基于文件系统的 资源集合 作为嵌套元素。
如果要替换的文本或替换文本跨越行边界,可以使用嵌套元素来指定它们。
这些元素支持属性
属性 | 描述 | 必需 |
---|---|---|
expandProperties | 是否在嵌套文本中扩展属性。自 Ant 1.8.0 起。 | 否;默认为 true |
<replace dir="${src}" value="wombat"> <include name="**/*.html"/> <replacetoken><![CDATA[multi line token]]></replacetoken> </replace>
将目录 ${src} 中所有 HTML 文件中的字符串 multi line\ntoken
的出现次数替换为字符串 wombat
。这里,\n
是特定于平台的行分隔符。
<replace file="${src}/index.html"> <replacetoken><![CDATA[two line token]]></replacetoken> <replacevalue><![CDATA[two line token]]></replacevalue> </replace>
除了允许进行多次替换之外,可选的嵌套 <replacefilter>
元素允许从属性文件中提取替换值。此文件的名称使用 <replace>
属性 propertyFile 指定。
属性 | 描述 | 必需 |
---|---|---|
token | 要搜索的字符串。 | 是,除非指定了嵌套的 replacetoken 。 |
value | 替换字符串。 | 两者都可以指定,但不能同时指定。如果需要,两者都可以省略。 |
property | 其值用作替换值的属性的名称。 |
自 Ant 1.8.0 起,token 和 value 可以像任务本身一样作为嵌套元素指定。
如果既没有使用 value 也没有使用 property,则使用使用 <replace>
属性 value 和/或 <replacevalue>
元素提供的 value。如果使用任何这些选项都没有指定值,则标记将被替换为空字符串。
在文件 configure.sh 中,将所有 @token1@
的实例替换为 defaultvalue
,将所有 @token2@
的实例替换为 value2
,并将所有 @token3@
的实例替换为属性 property.key
的值,如属性文件 src/name.properties 中所示。
<replace file="configure.sh" value="defaultvalue" propertyFile="src/name.properties"> <replacefilter token="@token1@"/> <replacefilter token="@token2@" value="value2"/> <replacefilter token="@token3@" property="property.key"/> <replacefilter> <replacetoken>@token4@</replacetoken> <replacevalue>value4</replacevalue> </replacefilter> </replace>
注意:可以在同一操作中使用 token/<replacetoken>
和 value/<replacevalue>
属性/元素、嵌套的 replacefilter
元素,或两者。