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。