从具有部分匹配名称的文件集创建文件zip

时间:2013-09-20 19:24:55

标签: ant

使用ANT,我正在尝试为我的构建创建一个zip文件,以便更新已发布的版本。要获取已更改文件的列表(这包括文件名中嵌入了版本字符串的.jar文件),我已完成以下操作:

  1. 将基本文件集复制到临时位置,其中版本字符串从文件名中删除。即foo_1.0.0.jar - > foo.jar中
  2. 将更新的文件集复制到临时位置,并从文件名中删除版本字符串。即foo_1.0.1.jar - > foo.jar中
  3. 使用“其他”选择器创建一个文件集,以比较删除了版本号的两个目录。
  4. 我现在想要创建一个包含步骤3中已更改文件的文件集,但是包含原始更新集中的完整文件名。所以我寻找的文件集会发现foo.jar已经改变,并包含“foo_1.0.1.jar”。

    然而,我正在努力弄清楚如何将diff'ed文件集与真实文件集(包括版本号)相匹配。怎么会在ANT中做到这一点?

1 个答案:

答案 0 :(得分:0)

我发现如何做到这一点,(正如马克指出的那样)有些复杂的问题。我的问题是没有使用正确的基础来创建文件集。为此,我做了以下事情。

“update.offering”=更新代码的位置 “$ {temp.dir} / diffFiles”=位置我复制了从基本版本发现更改的文件,减去了文件名中的版本字符串

<copy todir="${temp.dir}/outFiles" includeemptydirs="false">
        <fileset dir="${update.offering}" id="final.set">
            <present present="both" targetdir="${temp.dir}/diffFiles">
                <firstmatchmapper>
                    <regexpmapper from="(.*)(_[0-9]\..*)(\..*)" to="\1\3"/>
                    <mapper type="glob" from="*.*" to="*.*"/>
                    <mapper type="glob" from="*" to="*"/>
                </firstmatchmapper>
            </present>
        </fileset>
    </copy>

我需要做的是使用更新文件的位置作为新文件集的基础,然后使用正则表达式映射器匹配目标目录中的文件,该映射器允许我匹配不包括版本字符串的文件名。我还包括两个glob映射器,以确保我得到的文件没有名称不同的版本字符串。