2010-10-01 61 views
3

我目前这样做:蚂蚁:罐子和zipfileset - 从一个JAR文件复制到另一个

<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

回答

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"/> 
+0

我做trry前缀,H/W,我得到'嗒嗒/ IMG/com/xyz/img/logo.png'而不是'blah/img/logo.png',这就是我想要的。 – bguiz 2010-10-01 07:51:35

+0

我已经更新了我的答案,请尝试'fullpath'。 – Grodriguez 2010-10-01 07:52:48

+0

是的,'fullpath'确实可以用于单个文件,但是我有多个'.png'文件,我想要映射...我一直在寻找'mapper'(http://ant.apache.org /manual/Types/mapper.html)蚂蚁类型,但没有设法让他们工作... – bguiz 2010-10-01 07:58:01

2

为了在飞行档案中修改的目录结构,你可以结合使用任务与<mappedresources>,例如:

<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>