如何在Ant中重用多个zipfileset元素?
我们希望构建多个zip文件,其中一些文件的内容与其他文件相同。我没有为每个zip指定完整的文件列表(它们实际上相当大),而是想尝试重新使用 因此,我尝试使用如何在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"/>
进行以下操作:
<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实现了它——我不知道如何从自定义任务中的资源对象派生文件的位置。:)