ant:jar和zipfileset - 将文件从一个JAR复制到另一个JAR

时间:2010-10-01 06:55:47

标签: java ant build jar zip

我目前正在这样做:

<jar update="yes"
     jarfile="${pwd}/dist/${release}_installer.jar">
   <zipfileset src="${pwd}/dist/app.jar" includes="com/izforge/izpack/panels/**"/>
   <zipfileset src="${pwd}/dist/app.jar" includes="com/xyz/img/logo.png"/>
</jar>

我的现有安装程序JAR已更新,以根据需要包含从应用程序JAR中提取的文件。

到目前为止,非常好。

但是,我想修改行为,使图像文件的路径与复制的路径不同:

目前:

com/izforge/izpack/panels/MyIzPanel.class
com/xyz/img/logo.png

我想要的是什么:

com/izforge/izpack/panels/MyIzPanel.class
blah/img/logo.png

所以我需要复制文件,但是使用<zipfileset><jar>以便我可以修改目录结构。

有没有办法做到这一点,除了解压缩整个内容复制文件,然后再将其重新拉回来?


编辑:

链接到之前的相关问题:ant task to remove files from a jar

3 个答案:

答案 0 :(得分:5)

您可以使用fullpath属性:

<zipfileset src="${pwd}/dist/app.jar"
    includes="com/xyz/img/logo.png" fullpath="blah/img/logo.img"/>

如果您需要复制多个文件,可能需要查看prefix属性,例如:

<zipfileset src="${pwd}/dist/app.jar"
    includes="**/*.png" prefix="blah/img"/>

答案 1 :(得分:2)

为了动态修改档案中的目录结构,您可以将该任务与<mappedresources&gt;结合使用,例如:

<jar file="target.jar" update="true">
  <mappedresources>
    <zipfileset src="source.jar">
      <include name="com/xyz/img/*.png"/>
    </zipfileset>
    <mapper type="glob" from="com/xyz/img/*.png" to="bla/img/*.png" />
  </mappedresources>
</jar>

答案 2 :(得分:0)

您应该按照zipgroupfileset解释here