运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

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

运维开发网 https://www.qedev.com 2020-05-10 09:02 出处:网络 作者:运维开发网整理
我有一个构建文件,它创建一个tar和一个包含相同资源的zip. <tar destfile="my.tar.gz" compression="gzip"> <tarfileset dir="somedir" prefix="some_prefix" filemode="xxx"> <include name="some_pattern"/> </tarfileset> <!--
我有一个构建文件,它创建一个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或其他第三方扩展),但使用这些扩展的答案可能对其他人有帮助.

见 http://ant.apache.org/manual/using.html#references:

Any project element can be assigned an identifier using its id attribute. In most cases the element can subsequently be referenced by specifying the refid attribute on an element of the same type. This can be useful if you are going to replicate the same snippet of XML over and over again

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消