当然可以使用exec任务
完成,但我的问题是:
是否可以使用tar任务
完成?
我认为没有办法保留现有权限,因为根据复制任务的说明:
Unix提示:在复制文件时不会保留文件权限,它们最终将具有默认的UMASK权限。这是由于当前Java运行时中缺乏任何查询或设置文件权限的方法所致。如果您需要保存权限的复制功能,请改用
<exec executable="cp" ... >
。
但是,tar任务可以接受一个或多个tarfileset
元素。可以使用tarfileset
定义filemode
和/或dirmode
属性来指定unix权限。如果您指定多个包含仅匹配那些文件以获取每个所需权限集的包含,则该集中的文件将以那些权限包括。
这是不可能的。缺少权限使得 ant tar 任务对我几乎没用。除非使用exec 任务执行操作系统tar,否则无法完成它:
<exec executable="tar" output="/dev/null" os="Linux">
<arg value="--exclude-from=files_to_exclude.txt"/>
<arg value="-cvz"/>
<arg value="--file=${file.tar}"/>
<arg value="."/>
</exec>
几乎所有人类已知的操作系统都有gnu tar二进制文件。将其中一个放入您的版本控制系统中,并根据您的操作系统使用它。是的,每次运行时Ant都需要分叉一个进程。
我们的项目使用tarfileset运行良好。以下是一个工作示例,以防有人需要:
<tar destfile="${dist}/${module.name}-${version}.tar">
<tarfileset dir="${package.dir}" filemode="550" includesfile="${home.dir}/includelist.txt">
<include name="*.sh"/>
</tarfileset>
</tar>