2011-01-28 59 views
1

我想写一个带有<copy>任务的通用Ant构建脚本,该任务可以根据regexps选择性地重命名文件。嵌套的<regexpmapper>会从项目特定的属性文件(如果存在)加载重命名模式。Ant正则表达式映射器:从文件中读取模式?

有人已经做过这个或我必须写一个自己的映射器吗?

回答

1

下面是一个如何做到这一点的例子。

项目属性文件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。