取代

說明

Replace 是以目錄為基礎的工作,用於取代選取檔案中特定字串的出現。

如果您要取代跨越換行符號的文字,您必須使用巢狀 <replacetoken> 元素。

只有當輸出檔案與現有檔案不同時,才會寫入輸出檔案。這可防止基於未變更檔案的虛假重建,而這些檔案已由這項工作重新產生。

參數

屬性 說明 必要
檔案 應取代其代碼的檔案。 兩個選項中必須擇一
目錄 在多個檔案中取代代碼時要使用的基本目錄。
編碼 取代作業所使用的檔案編碼。 否;預設為 JVM 預設字元編碼
代碼 必須取代的代碼。 是,除非使用巢狀 replacetoken 元素或 replacefilterfile 屬性。
代碼的新值。 否;預設為空字串 ()
摘要 指出是否應產生取代作業的摘要,詳細說明已處理的代碼出現次數和檔案。 否;預設為無摘要
屬性檔案 有效的屬性檔案,其中包含使用巢狀 <replacefilter> 元素指定的屬性。 是,僅當使用 <replacefilter>property 屬性時。
replacefilterfile 有效的屬性檔案。每個屬性將視為 replacefilter,其中 token 是屬性的名稱,而 value 是屬性的值。
包含 必須包含的檔案模式的逗號或空格分隔清單。 否;預設為全部 (**)
包含檔案 檔案名稱。此檔案的每一行都會視為包含模式
排除 必須排除的檔案模式的逗號或空格分隔清單。 否;預設為預設排除或 (如果 defaultexcludesno) 無
排除檔案 檔案名稱。此檔案的每一行都會視為排除模式
預設排除 指示是否使用預設排除 (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 指定。

屬性 說明 必要
代碼 要搜尋的字串。 是,除非指定了巢狀 replacetoken
替換字串。 可以指定其中一個,但不能同時指定兩個。如果需要,兩個都可以省略。
property 其值用作替換值的屬性的名稱。

自 Ant 1.8.0 起tokenvalue 可以指定為巢狀元素,就像在任務本身中一樣。

如果未同時使用 valueproperty,則使用 <replace> 屬性 value 和/或 <replacevalue> 元素提供的數值。如果使用這些選項未指定任何值,則會將 token 替換為空字串。

範例

在檔案 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 元素,或同時使用這兩種方式。