Ant zipfileset重命名文件

时间:2012-11-26 12:46:11

标签: ant rename

我想将文件包含到zipfileset,但也将其重命名为

e.g。

<zipfileset dir="${basedir}/test/target"   prefix="webapps">
    <include name="test*.war"/>
</zipfileset>

但想要将名称从test.war更改为sample.war

如何实现这一目标?谢谢。

4 个答案:

答案 0 :(得分:6)

你可以使用mappedresources resource collection做你想做的事。 这对我来说是一个基本的测试(一个叫做test1.war的输入战争):

<mappedresources id="mapped.zfs">
    <zipfileset dir="${basedir}/test/target">
        <include name="test*.war"/>
    </zipfileset>
    <globmapper from="test*" to="webapps/sample*" />
</mappedresources>

<zip destfile="eg.zip">
    <resources refid="mapped.zfs" />
</zip>

% unzip -l eg.zip 
Archive:  eg.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  11-27-2012 00:19   webapps/
     1423  11-27-2012 00:16   webapps/sample1.war
---------                     -------
     1423                     2 files

答案 1 :(得分:1)

我认为这不可行,我会采取两步法。

重命名并添加:

<move file="${basedir}/test/target/test.war" tofile="${basedir}/test/target/sample.war"/>
<zipfileset dir="${basedir}/test/target"   prefix="webapps">
    <include name="sample*.war"/>
</zipfileset>

或复制并添加(如果您需要两者):

<copy file="${basedir}/test/target/test.war" tofile="${basedir}/test/target/sample.war"/>
<zipfileset dir="${basedir}/test/target"   prefix="webapps">
    <include name="sample*.war"/>
</zipfileset>

答案 2 :(得分:0)

除了彼得提到的解决方案,如果你不想保留同一个文件的2个副本......你可以删除复制的那个......

<copy file="${basedir}/test/target/test.war" tofile="${basedir}/test/target/sample.war"/>
<zipfileset dir="${basedir}/test/target"   prefix="webapps">
    <include name="sample*.war"/>
</zipfileset>
<delete file="${basedir}/test/target/sample.war"/>

现在你没有test.war的副本。

答案 3 :(得分:0)

马丁克莱顿的回答对我有用。我也能够在一个元素(作为孩子)中完成所有这些:

<zip destfile="eg.zip">
  <mappedresources>
    <zipfileset file="test*.war"/>
    <globmapper from="test*" to="webapps/sample*" />
  </mappedresources>
  <!-- additional file-sets and resources may be listed here -->
</zip>