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 元素,或两者。