Replace is a directory based task for replacing the occurrence of a given string with another string in selected file.
If you want to replace a text that crosses line boundaries, you
must use a nested <replacetoken>
element.
The output file is only written if it differs from the existing file. This prevents spurious rebuilds based on unchanged files which have been regenerated by this task.
Attribute | Description | Required |
file | file for which the token should be replaced. | Exactly one of the two. |
dir | The base directory to use when replacing a token in multiple files. | |
encoding | The encoding of the files upon which replace operates. | No - defaults to default JVM encoding |
token | the token which must be replaced. | Yes, unless a nested
replacetoken element or the replacefilterfile
attribute is used. |
value | the new value for the token. When omitted, an empty string ("") is used. | No |
summary | Indicates whether a summary of the replace operation should be produced, detailing how many token occurrences and files were processed | No, by default no summary is produced |
propertyFile | valid property file from which properties specified using nested <replacefilter> elements are drawn. |
Yes only if property attribute of <replacefilter> is used. |
replacefilterfile | valid property file. Each property will be
treated as a replacefilter where token is the name of
the property and value is the properties value.
| No. |
includes | comma- or space-separated list of patterns of files that must be included. All files are included when omitted. | No |
includesfile | the name of a file. Each line of this file is taken to be an include pattern | No |
excludes | comma- or space-separated list of patterns of files that must be excluded. No files (except default excludes) are excluded when omitted. | No |
excludesfile | the name of a file. Each line of this file is taken to be an exclude pattern | No |
defaultexcludes | indicates whether default excludes should be used or not ("yes"/"no"). Default excludes are used when omitted. | No |
<replace file="${src}/index.html" token="@@@" value="wombat"/>
replaces occurrences of the string "@@@" with the string
"wombat", in the file ${src}/index.html
.
This task forms an implicit FileSet and
supports all attributes of <fileset>
as well as the
nested <include>
, <exclude>
and
<patternset>
elements.
If either the text you want to replace or the replacement text cross line boundaries, you can use nested elements to specify them.
<replace dir="${src}" value="wombat"> <include name="**/*.html"/> <replacetoken><![CDATA[multi line token]]></replacetoken> </replace>
replaces occurrences of the string "multi
line\ntoken" with the string "wombat", in all
HTML files in the directory ${src}
.Where \n is
the platform specific line separator.
<replace file="${src}/index.html"> <replacetoken><![CDATA[two line token]]></replacetoken> <replacevalue><![CDATA[two line token]]></replacevalue> </replace>
In addition to allowing for multiple replacements, optional nested <replacefilter>
elements allow replacement values to be extracted from a property file. The name of this file is specified using the <replace>
attribute propertyFile.
Attribute | Description | Required |
token | The string to search for. | Yes |
value | The replacement string. | Either may be specified, but not both. Both can be omitted, if desired. |
property | Name of the property whose value is to serve as the replacement value. |
If neither value nor property is used, the value provided using the <replace>
attribute value and/or the <replacevalue>
element is used. If no value was specified using either of these options, the token is replaced with an empty string.
<replace file="configure.sh" value="defaultvalue" propertyFile="source/name.properties"> <replacefilter token="@token1@"/> <replacefilter token="@token2@" value="value2"/> <replacefilter token="@token3@" property="property.key"/> </replace>
In file configure.sh
, replace all instances of "@token1@" with "defaultvalue", all instances of "@token2@" with "value2", and all instances of "@token3@" with the value of the property "property.key", as it appears in property file src/name.properties
.
Note: It is possible to use either the token/<replacetoken>
and value/<replacevalue>
attributes/elements, the nested replacefilter elements, or both in the same operation.