2009-10-04 102 views

回答

12

我不认为有一种方法可以保留现有的权限,每本说明从copy task

的Unix注:当文件被复制文件权限不保留;他们最终会使用默认的UMASK权限。这是由于缺乏在当前Java运行时中查询或设置文件权限的手段而造成的。如果您需要保留权限复制功能,请改为使用<exec executable="cp" ... >

但是,tar task可以采取一个或多个tarfileset元素。可以使用filemode和/或dirmode属性来定义tarfileset以指定unix权限。如果指定多个包含仅匹配那些文件以获取每组必需的权限,则该组中的文件将包含在这些权限中。

11

这种权限的缺乏使得ant tar任务几乎对我无用。有没有办法做到这一点不与EXEC任务执行操作系统焦油

<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每次运行时都需要分离一个进程。

+0

这是为什么downvoted?这个问题的完美解决方案 - upvoting – purecharger 2010-11-17 18:09:37

+3

这很可能是因为回答者没有读到这个问题而被低估:“当然可以使用exec任务完成” – 2011-03-30 21:11:19

+0

ant tar完全没用。我明白为什么(Java不能读取文件权限或一些垃圾),但这并不使它有用,因为我想tar来重写所有权限。这应该是正确的答案。 – Chris 2011-05-23 17:15:54

6

使用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)。

希望这可以帮助别人。

+0

让我猜:ivy + git存储库?因为这就是我引起这个问题的原因。 – bassim 2014-10-12 12:36:00

+0

这应该是答案!这是做到这一点的正确方法 – 2016-03-03 19:28:05

相关问题