如何在Ant中重用多个zipfileset元素?

如何在Ant中重用多个zipfileset元素?,ant,zip,fileset,Ant,Zip,Fileset,我们希望构建多个zip文件,其中一些文件的内容与其他文件相同。我没有为每个zip指定完整的文件列表(它们实际上相当大),而是想尝试重新使用 因此,我尝试使用进行以下操作: <project name="test" default="zips"> <target name="zips"> <union id="common"> <zipfileset prefix="." dir="." includes="1"/>

我们希望构建多个zip文件,其中一些文件的内容与其他文件相同。我没有为每个zip指定完整的文件列表(它们实际上相当大),而是想尝试重新使用

因此,我尝试使用
进行以下操作:

<project name="test" default="zips">
  <target name="zips">
    <union id="common">
      <zipfileset prefix="." dir="." includes="1"/>
      <zipfileset prefix="3" dir="." includes="2"/>
    </union>
    <zip zipfile="1.zip">
      <resources refid="common"/>
    </zip>
    <zip zipfile="2.zip">
      <resources refid="common"/>
    </zip>
  </target>
</project>

这确实会生成两个zip文件,每个文件中都有“1”和“2”,但两个文件中都缺少“3”前缀

我做错了什么


我们还有一个自定义任务,它在内部使用zipfileset。我也尝试让它与union一起工作,但不知道如何获取前缀值。

请为您的
通用
资源集合尝试以下操作:

<union id="common">
  <fileset dir="." includes="1"/>
  <mappedresources>
      <fileset dir="." includes="2"/>
      <globmapper from="*" to="3/*"/>
  </mappedresources>
</union>

zipfileset
中的
prefix
参数仅在从使用
src
参数指定的存档中读取文件时使用,否则将忽略它-这就是您看到的行为。 为了便于使用,您正在尝试在创建的存档中指定前缀。要做到这一点,你需要一个映射器


另请参见:Ant文档以了解有趣的内容。所以我想这有点难对付。inside确实使用了前缀,但我去看了看,zip任务似乎显式地查找它并将其转换为映射器。实际上只有一个catch实现了它——我不知道如何从自定义任务中的资源对象派生文件的位置。:)