我们希望构建多个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>
这会生成两个zip文件,每个文件中包含“1”和“2”,但两个文件中都缺少“3”前缀。
我做错了什么?
我们还有一个内部使用zipfileset的自定义任务。我试图让它与union一起工作,但无法弄清楚如何获得前缀值。
答案 0 :(得分:2)
尝试使用common
resourcecollection:
<union id="common">
<fileset dir="." includes="1"/>
<mappedresources>
<fileset dir="." includes="2"/>
<globmapper from="*" to="3/*"/>
</mappedresources>
</union>
prefix
中的zipfileset
参数仅在从使用src
参数指定的存档中读取文件时使用,否则会被忽略 - 这是您看到的行为。
为了您的使用,您尝试在创建的存档中指定前缀。要做到这一点,你需要一个映射器。
另请参阅:mappedresources.