从共享的文件集集构建tar和zip

时间:2011-12-15 11:48:44

标签: ant

我有一个构建文件,它创建一个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。

TarFileSetZipFileSet非常相似(都扩展了ArchiveFileSet)。我尝试从zipfilesets构建tar和zip。这有效。至少,只要您不需要特定于TarFileSet的功能。 (我还查看了TarFileSet的源代码,看到它有代码将ArchiveFileset转换为TarFileSet,这解释了为什么会这样做。)

缺少的是一种定义一组存档文件集并重用它的方法。

您无法使用pathunion成功合并归档文件集。在这种情况下,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或其他第三方扩展),但使用这些扩展的答案可能对其他人有用。

1 个答案:

答案 0 :(得分:1)

请参阅http://ant.apache.org/manual/using.html#references

  

可以使用其id为任何项目元素分配标识符   属性。在大多数情况下,元素随后可以被引用   在同一类型的元素上指定refid属性。这个   如果要复制相同的XML片段,则可能很有用   一遍又一遍