Ant regexpmapper文件分隔符问题



我正在用ant文件集/regexpmapper玩砖墙,试图简单地重命名一个目录(位于路径中间)。。。

情况很简单:

  • 我有正在复制到DB/api/src/main/distribution/component的路径component/DB/
  • 路径组件/DB包含一组install.sql脚本和一个名为api(或"API"或"API")的目录。这个"api"目录包含额外的sql,并将被批量复制到目标DB/api/component中(因此创建DB/api/src/main/distribution/component/api
  • 作为这个副本的一部分,为了保持一致性,我只想将"api"目录名小写

听起来很简单,我一直在使用文件集和regexpmapper(或mapper type=regexp)来实现这一点。然而,我得到了喜忧参半的结果。。。值得注意的是,一旦我在中输入"/"(或"\\"、"/"或${file.separator},即使使用regexpmapper.handledirsep=yes),它就不起作用。

以下是混淆的源路径结构(来自find):

component/DB/
component/DB/API
component/DB/API/file1.sql
component/DB/API/file2.sql
component/DB/xyz.sql
component/DB/Install_API.sql
component/DB/excludes1/...

我的基本副本如下:

<copy todir="${my.db.api.dir}/src/main/distribution/component" verbose="true">
    <fileset dir="${component.src.dir}/DB">
        <exclude name="exclude1"/>
        <exclude name="exclude1/**/*"/>
    </fileset>
    <regexpmapper handledirsep="yes"
            from="(.*)/API(.*)" to="1/api2"/>
    <!--mapper type="regexp" from="(.*)/API(.*)" to="1/api2"/-->
</copy>

为了清楚起见,我留下了"/"字。你可以看到,基本前提是发现"API",抓取周围的文本,然后用"API"回放。如果我在from中省略了"/",那么这确实有效,但只要我把"/"(或它的朋友)放进去,目录就根本不会复制。请注意,我想要前面的"/",因为我只想重命名该目录,而不是其中包含的Install_API.sql文件。

网上有很多示例,但似乎没有人遇到过这个问题,因为所谓的工作示例似乎都使用了普通的"/"、"\"或声称由handledirset属性处理。

RH6.3 上的蚂蚁1.8.4

非常感谢。

您的文件集的基本目录是DB目录,这意味着您的映射程序将映射的路径的形式为

API/file1.sql
Install_API.sql
excludes1/...

相对于该目录。因此,API目录名前面没有斜杠,from模式永远不会匹配。但还有一个更深层次的问题,那就是regexpmapper完全忽略任何与from模式不匹配的文件名。这不是您想要的,因为您需要将API更改为api,但保持非API文件名不变。因此,您需要的不是regexpmapper,而是带有replaceregex过滤器的filtermapper

<copy todir="${my.db.api.dir}/src/main/distribution/component" verbose="true">
    <fileset dir="${component.src.dir}/DB">
        <exclude name="exclude1"/>
        <exclude name="exclude1/**/*"/>
    </fileset>
    <filtermapper>
        <!-- look for either just "API" with no trailer, or API followed by
             a slash, in any combination of case -->
        <replaceregex pattern="^API(?=${file.separator}|$$)" replace="api"
                      flags="i"/><!-- case-insensitive search, finds API, Api, ... -->
    </filtermapper>
</copy>

相关内容

  • 没有找到相关文章

最新更新