Ant regexp mapper:从文件中读取模式?

时间:2011-01-28 09:14:17

标签: regex ant mapper

我想编写一个带有<copy>任务的通用Ant构建脚本,该脚本可以根据regexp重命名文件。嵌套的<regexpmapper>将从项目特定的属性文件中加载重命名模式(如果存在)。

有人已经这样做了,还是我必须写一个自己的映射器?

1 个答案:

答案 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。