我想编写一个带有<copy>
任务的通用Ant构建脚本,该脚本可以根据regexp重命名文件。嵌套的<regexpmapper>
将从项目特定的属性文件中加载重命名模式(如果存在)。
有人已经这样做了,还是我必须写一个自己的映射器?
答案 0 :(得分:1)
以下是您如何执行此操作的示例。
项目属性文件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
个实例,一个根据项目属性文件中的属性执行regexp替换,另一个不执行任何操作。 use.filter
属性决定选择哪个。如果项目属性文件不存在use.filter
将不会被设置,那么将使用'do-nothing'标识过滤器映射器。
请注意,这仅适用于在copy
任务中使用嵌套资源时。如果您只有一个要复制的文件,并使用<copy file="..."
,则会忽略filtermapper。