目标:使用ant为任意组合创建单个tar存档 (例如)5个文件夹(所有文件夹,或任何3个文件夹或任何4个文件夹) ...)。我不喜欢使用临时目录和复制命令。
如果ant tar任务支持append,这应该很简单。
搜索引导我:
压缩antlib的tar任务中的设置模式=“更新”应该执行请求。
来自:https://issues.apache.org/bugzilla/show_bug.cgi?id=39617
我如何知道是否安装了'antlib',或者我如何安装 它。如何设置mode =“update” - 哪个文件是chgd?。
在ant的tar任务中启用“tar append”的最佳方法是什么?
除非tar文件已存在,否则GNU tar -r或-u选项会失败 - 关于如何处理蚂蚁的任何想法?
--
感谢
PS
以下示例是一个解析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} ]] && C=r || C=c;
tar ${C}vf ${tarfile} --exclude '*/.svn' ${src}/main/blah
"/>
</exec>
</target>
我不想使用上述方法,但它确实有效。
答案 0 :(得分:1)
使用Compress Antlib需要两个项目:
您可以选择使用Ant安装来安装这些,但也许可以将它们整合到您的构建中。
这是一个使用这两个下载的Ant构建文件示例,它们放置在构建的basedir下的名为external
的目录中。这将使用目录my.tar
中的文件创建dir_one
,然后使用从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 task的更多选项,请参阅超类ArchiveBase。
答案 1 :(得分:0)
为什么不首先创建包含多个源文件夹的存档,而不是更新现有存档?
<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>