【发布时间】:2011-01-28 09:14:16
【问题描述】:
我想编写一个带有<copy> 任务的通用Ant 构建脚本,该任务可以选择基于正则表达式重命名文件。嵌套的<regexpmapper> 将从项目特定的属性文件中加载重命名模式(如果存在)。
有人已经这样做了还是我必须自己写一个映射器?
【问题讨论】:
我想编写一个带有<copy> 任务的通用Ant 构建脚本,该任务可以选择基于正则表达式重命名文件。嵌套的<regexpmapper> 将从项目特定的属性文件中加载重命名模式(如果存在)。
有人已经这样做了还是我必须自己写一个映射器?
【问题讨论】:
这里有一个例子说明你可以如何做到这一点。
项目属性文件proj_props.txt 包含:
use.filter=regexp.mapper
from.regexp=(.*)_test(.*)
to.regexp=\\1\\2
(注意 to 字符串中的转义 \。)
构建文件:
<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 实例,一个根据项目属性文件中的属性执行正则表达式替换,另一个不执行任何操作。 use.filter 属性决定选择哪个。如果项目属性文件不存在,use.filter 将不会被设置,因此将使用 'do-nothing' 标识过滤器映射器。
请注意,这仅在 copy 任务中使用嵌套资源时有效。如果您只有一个文件要复制,并使用<copy file="...",则过滤器映射器将被忽略。
【讨论】: