【问题标题】:Ant regexp mapper: Reading patterns from a file?Ant regexp 映射器:从文件中读取模式?
【发布时间】:2011-01-28 09:14:16
【问题描述】:

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

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

【问题讨论】:

    标签: regex ant mapper


    【解决方案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 实例,一个根据项目属性文件中的属性执行正则表达式替换,另一个不执行任何操作。 use.filter 属性决定选择哪个。如果项目属性文件不存在,use.filter 将不会被设置,因此将使用 'do-nothing' 标识过滤器映射器。

    请注意,这仅在 copy 任务中使用嵌套资源时有效。如果您只有一个文件要复制,并使用&lt;copy file="...",则过滤器映射器将被忽略。

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多