1

我想编写一个通用的 Ant 构建脚本,其<copy>任务可以选择基于正则表达式重命名文件。如果存在,嵌套<regexpmapper>将从特定于项目的属性文件中加载重命名模式。

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

4

1 回答 1

2

这是您如何执行此操作的示例。

项目属性文件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="...",则过滤器映射器将被忽略。

于 2011-01-29T14:29:42.157 回答