我想编写一个通用的 Ant 构建脚本,其<copy>
任务可以选择基于正则表达式重命名文件。如果存在,嵌套<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
不会设置,因此将使用“无所事事”身份过滤器映射器。
请注意,这仅在使用copy
任务中的嵌套资源时有效。如果您只有一个文件要复制和使用<copy file="..."
,则过滤器映射器将被忽略。