Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ant tar任务并保留文件权限?_Ant_File Permissions_Tar - Fatal编程技术网

如何使用Ant tar任务并保留文件权限?

如何使用Ant tar任务并保留文件权限?,ant,file-permissions,tar,Ant,File Permissions,Tar,当然可以使用exec任务来完成,但我的问题是: 是否可以使用tar任务执行此操作?根据以下说明,我认为没有办法保留现有权限: Unix注意:复制文件时不保留文件权限;它们以默认的UMASK权限结束。这是由于缺乏在当前Java运行时中查询或设置文件权限的任何方法造成的。如果需要保留权限的复制功能,请改用 但是,可以使用一个或多个元素。可以使用filemode和/或dirmode属性定义tarfileset,以指定unix权限。如果指定多个包含仅与这些文件匹配以获得每组所需权限,则该集中的文件将包含

当然可以使用
exec任务来完成,但我的问题是:


是否可以使用tar任务执行此操作?

根据以下说明,我认为没有办法保留现有权限:

Unix注意:复制文件时不保留文件权限;它们以默认的UMASK权限结束。这是由于缺乏在当前Java运行时中查询或设置文件权限的任何方法造成的。如果需要保留权限的复制功能,请改用


但是,可以使用一个或多个元素。可以使用
filemode
和/或
dirmode
属性定义
tarfileset
,以指定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>


几乎所有人类已知的操作系统都有GNUTAR二进制文件。将其中一个放在版本控制系统中,并根据您的操作系统使用它。是的,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>

在本例中,includelist.txt用于告诉tar文件中包含哪些文件。扩展名为*.sh的所有文件都将具有用户和组的读取和执行权限(550)


希望这对某人有所帮助。

为什么会被否决?这个问题的完美解决方案——Upvoting很可能被否决,因为回答者没有读到这个问题:“当然可以使用exec任务来完成。”ant tar完全没有用。我理解为什么(java不能读取文件权限或一些垃圾),但这并不意味着仅仅因为我想要tar就重写我的所有权限是有用的。这应该是正确的答案。这并不是一个真正的解决方案,它只适用于焦油箱可用的操作系统。如果我想在任何平台上构建该怎么办?让我猜猜:ivy+git存储库?因为这就是我要问的问题。这应该是答案!这是正确的做法