【问题标题】:ant : jar and zipfileset - copy files from one JAR into anotherant : jar 和 zipfileset - 将文件从一个 JAR 复制到另一个
【发布时间】:2011-04-19 17:18:00
【问题描述】:

我目前正在这样做:

<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

所以我需要复制文件,但使用&lt;zipfileset&gt; 和&lt;jar&gt; 以便我可以修改目录结构。

除了解压缩整个内容复制文件然后再次压缩它之外,还有其他方法吗?


编辑:

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

【问题讨论】:

    标签: java ant build jar zip


    【解决方案1】:

    你可以使用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"/>
    

    【讨论】:

    • 我确实尝试了前缀,但我得到的是 blah/img/com/xyz/img/logo.png 而不是 blah/img/logo.png,这正是我想要的。
    • 是的,fullpath 确实适用于单个文件,但是我有多个要映射的 .png 文件...我一直在查看 mapper (ant.apache.org/manual/Types/mapper.html ) 蚂蚁类型,但还没有设法让它们工作......
    • 对于多个文件,如果prefix 不满足您的需求,那么是的,您将需要使用映射器。
    【解决方案2】:

    为了即时修改存档中的目录结构,您可以将任务与&lt;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>
    

    【讨论】:

      【解决方案3】:

      您可能应该按照here 的说明查看zipgroupfileset。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 2012-12-28
        • 2018-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多