蚂蚁 TAR 任务:启用"tar append"的过程



目标:使用ant为任何组合创建单个tar存档(比如)5个文件夹(所有文件夹,或任何3个文件夹或任何4个文件夹)……)。我不喜欢使用临时目录和复制命令。

如果ant tar任务支持追加,这应该很简单。

搜索到:

在压缩antlib的tar任务中设置mode="update"应该执行请求。

从:https://issues.apache.org/bugzilla/show_bug.cgi?id=39617

我如何知道'antlib'是否已安装,或者我如何安装它。如何设置mode="update" -哪个文件是chgd?

在ant的tar任务中启用"tar追加"的最好方法是什么?

GNU tar -r或-u选项失败,除非tar文件已经存在有什么办法可以解决吗?

--

感谢

p>

面的例子是一个绕过fork shell,然后检查到查看tarfile是否存在,如果存在则运行tar w/append选项:
<target name="package-blah" description="generate tar file" depends="clean,init">
  <exec executable="sh" >
      <arg value="-xc"/>
      <arg value="
        [[ -f ${tarfile} ]] &amp;&amp; C=r || C=c;
        tar ${C}vf ${tarfile} --exclude '*/.svn' ${src}/main/blah
      "/>
  </exec>
</target>

我宁愿不使用上面的方法,但它是有效的。

使用Compress Antlib需要两个条件:

  • 压缩Antlib本身,可以在这里找到
    如果你已经有这个文件,可能会命名为ant-compress-1.0.jar
  • Apache Commons Compress,可以在这里找到。
    如果你有这个,它很可能被称为commons-compress-1.2.jar.

您可以选择在您的Ant安装中安装它们,但也许将它们包含在您的构建中会更简洁。

下面是一个示例Ant构建文件,它使用了这两个下载文件,并将它们放在basedir下名为external的目录中用于构建。这将使用目录dir_one中的文件创建my.tar,然后使用从dir_two添加的文件更新该tar。

<project basedir="." xmlns:compress="antlib:org.apache.ant.compress">
<taskdef uri="antlib:org.apache.ant.compress"
            resource="org/apache/ant/compress/antlib.xml"
            classpath="external/ant-compress-1.0.jar:external/commons-compress-1.2.jar"/>
<delete file="my.tar" />
<compress:tar dest="my.tar" mode="update">
   <fileset dir="dir_one" includes="*.txt" />
</compress:tar>
<compress:tar dest="my.tar" mode="update">
   <fileset dir="dir_two" includes="*.txt" />
</compress:tar>
</project>

注意使用名称空间来消除与标准Ant tar任务的歧义。需要taskdef来使Ant意识到Antlib。

以这种方式合并时要小心-如果合并同名的文件可能会出现奇怪的事情。请注意,在幕后,Commons Compress会创建一个存档的临时副本,所以这并不能避免,它只是为你做了。

如果您想探索tar任务的更多选项,请参阅超类ArchiveBase。

与其更新现有的存档,为什么不首先使用多个源文件夹创建存档呢?

<tar destfile="${target}/mytar.tar">
    <tarfileset dir="srcdir1">
        <include name="**/*" />
        <exclude name="**/*.sh" />
    </tarfileset>
    <tarfileset dir="srcdir2">
        <include name="**/*.sh" />
    </tarfileset>
    <tarfileset dir="srcdir3">
        <include name="**/*" />
    </tarfileset>
</tar>

相关内容

  • 没有找到相关文章

最新更新