替换

描述

Replace 是一个基于目录的任务,用于在选定的文件中将给定字符串的出现替换为另一个字符串。

如果要替换跨越行边界的文本,则必须使用嵌套的 <replacetoken> 元素。

只有在输出文件与现有文件不同时才会写入输出文件。这可以防止基于未更改的文件(这些文件已由此任务重新生成)的虚假重建。

参数

属性 描述 必需
file 应替换标记的文件。 两者之一必须存在
dir 在多个文件中替换标记时使用的基本目录。
encoding replace 操作所基于文件的编码。 否;默认为默认 JVM 字符编码
token 必须替换的标记。 是,除非使用嵌套的 replacetoken 元素或 replacefilterfile 属性。
value 标记的新值。 否;默认为空字符串 ()
summary 指示是否应生成替换操作的摘要,详细说明处理了多少个标记出现次数和文件 否;默认为不生成摘要
propertyFile 有效的属性文件,从中提取使用嵌套的 <replacefilter> 元素指定的属性。 是,仅当 <replacefilter>property 属性被使用时。
replacefilterfile 有效的属性文件。每个属性将被视为一个 replacefilter,其中 token 是属性的名称,value 是属性的值。
includes 必须包含的文件模式的逗号或空格分隔列表。 否;默认为全部 (**)
includesfile 文件名。此文件的每一行都被视为一个包含模式
excludes 必须排除的文件模式的逗号或空格分隔列表。 否;默认为默认排除项,如果 defaultexcludesno,则为无
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 起,此任务支持任何基于文件系统的 资源集合 作为嵌套元素。

replacetoken 和 replacevalue

如果要替换的文本或替换文本跨越行边界,可以使用嵌套元素来指定它们。

这些元素支持属性

属性 描述 必需
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

除了允许进行多次替换之外,可选的嵌套 <replacefilter> 元素允许从属性文件中提取替换值。此文件的名称使用 <replace> 属性 propertyFile 指定。

属性 描述 必需
token 要搜索的字符串。 是,除非指定了嵌套的 replacetoken
value 替换字符串。 两者都可以指定,但不能同时指定。如果需要,两者都可以省略。
property 其值用作替换值的属性的名称。

自 Ant 1.8.0 起tokenvalue 可以像任务本身一样作为嵌套元素指定。

如果既没有使用 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 元素,或两者。