1

我们想要构建多个 zip 文件,其中一些文件的内容与其他文件相同。而不是为每个 zip 指定完整的文件列表(它们实际上非常大),我想我会尝试得到一些重用。

所以我尝试使用<union>这个:

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

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

我究竟做错了什么?

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

4

1 回答 1

2

试试这个为你的common资源收集:

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

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

另请参阅:Ant 文档mappedresources.

于 2012-10-16T14:02:56.427 回答