我有一個構建文件,它創建一個包含相同資源的tar和zip文件。從一組共享文件集中生成一個tar和一個zip文件
<tar destfile="my.tar.gz" compression="gzip">
<tarfileset dir="somedir" prefix="some_prefix" filemode="xxx">
<include name="some_pattern"/>
</tarfileset>
<!-- other tarfilesets ... -->
</tar>
<zip destfile="my.zip">
<zipfileset dir="somedir" prefix="some_prefix" filemode="xxx">
<include name="some_pattern"/>
</zipfileset>
<!-- other zipfilesets ... -->
</tar>
檔案中有很多包含的文件集。
我寧願將重複分解 - 以某種方式定義文件集一次,並重新使用它們來構建tar和zip。
TarFileSet和ZipFileSet非常相似(都擴展了ArchiveFileSet)。我嘗試從zipfilesets構建一個tar和一個zip文件。這工作。至少,只要您不需要特定於TarFileSet的功能。 (我也查看了TarFileSet的源代碼,並看到它有一個將ArchiveFileset轉換爲TarFileSet的代碼,這解釋了爲什麼這會起作用)。
缺少的是定義一組歸檔文件集並重用它的方法。
使用path或union無法成功組合歸檔文件集。在這種情況下,ArchiveFileSet的額外屬性(例如前綴)將被丟棄。 (使用PatternSet不會在所有的工作。)
於是我想出了迄今爲止最好的是這樣的:
<project default="test">
<target name="test">
<zipfileset dir="test/1" filemode="755" prefix="test1" id="test1"/>
<zipfileset dir="test/2" filemode="755" prefix="test2" id="test2"/>
<do_tar destfile="test.tar.gz">
<filesets>
<zipfileset refid="test1"/>
<zipfileset refid="test2"/>
</filesets>
</do_tar>
<do_zip destfile="test.zip">
<filesets>
<zipfileset refid="test1"/>
<zipfileset refid="test2"/>
</filesets>
</do_zip>
</target>
<macrodef name="do_tar">
<attribute name="destfile"/>
<attribute name="compression" default="gzip"/>
<element name="filesets"/>
<sequential>
<tar destfile="@{destfile}" compression="@{compression}">
<filesets/>
</tar>
</sequential>
</macrodef>
<macrodef name="do_zip">
<attribute name="destfile"/>
<element name="filesets"/>
<sequential>
<zip destfile="@{destfile}">
<filesets/>
</zip>
</sequential>
</macrodef>
</project>
真的,我不認爲這是一個進步可言,因爲它是不是真的重新使用該文件集。
我唯一能想到的其他事情是爲「歸檔文件集集合」創建一個自定義typedef(編寫Java代碼),這個歸檔文件集可以在marcos中由id引用。但是如果涉及到這一點,我可能會只是在構建文件中使用重複。
有什麼更清潔,我失蹤?
我的要求是單獨使用Ant(不是ant-contrib或其他第三方擴展),但使用這些的答案可能對其他人有幫助。
謝謝。我在do_tar塊中嘗試了這個` ... `,然後在do_zip塊中加入了這個```。它不起作用。因此,它仍然看起來像首先需要一組「文件集」容器,所以我可以通過設置ID來重新使用它。 –
sudocode
2011-12-15 12:39:53