1
我想寫一個帶有<copy>
任務的通用Ant構建腳本,該任務可以根據regexps選擇性地重命名文件。嵌套的<regexpmapper>
會從項目特定的屬性文件(如果存在)加載重命名模式。Ant正則表達式映射器:從文件中讀取模式?
有人已經做過這個或我必須寫一個自己的映射器嗎?
我想寫一個帶有<copy>
任務的通用Ant構建腳本,該任務可以根據regexps選擇性地重命名文件。嵌套的<regexpmapper>
會從項目特定的屬性文件(如果存在)加載重命名模式。Ant正則表達式映射器:從文件中讀取模式?
有人已經做過這個或我必須寫一個自己的映射器嗎?
下面是一個如何做到這一點的例子。
項目屬性文件proj_props.txt
包含:
use.filter=regexp.mapper
from.regexp=(.*)_test(.*)
to.regexp=\\1\\2
(注意逃逸的\
字符串。)
構建文件:
<property file="proj_props.txt" />
<!-- filter for regexp -->
<filtermapper id="regexp.mapper">
<tokenfilter>
<replaceregex pattern="${from.regexp}"
replace="${to.regexp}" />
</tokenfilter>
</filtermapper>
<!-- identity filter, used when no regexp needed -->
<filtermapper id="identity.mapper" />
<!-- decide which filter to use -->
<condition property="chosen.mapper"
value="regexp.mapper" else="identity.mapper">
<isset property="use.filter" />
</condition>
<copy todir="...">
<fileset>
...
</fileset>
<filtermapper refid="${chosen.mapper}" />
</copy>
你定義一對filtermapper
的情況下,一根據項目屬性文件中的屬性執行regexp替換,另一個不會事情。 use.filter
屬性決定選擇哪個。如果項目屬性文件不存在use.filter
將不會被設置,那麼將使用'不做'身份過濾器映射器。
請注意,這隻適用於在copy
任務中使用嵌套資源。如果您只有一個文件要複製,並使用<copy file="..."
,則會忽略filtermapper。