我可以存储unix权限在一个zip文件(用Apacheantbuild成)?

我正在为一个Java应用程序构build一个linux安装程序,并且最终得到了一个install.jar和一个setup.sh文件,我使用ant将其放在一个zip文件中。

这个想法是用户解压缩zip文件,然后运行setup.sh,但麻烦的是,他们总是需要chmod setup.sh首先给自己执行权限。

我想要删除这一步,我不知道如果问题部分是:

  1. 我在Windows上构build
  2. 即时通讯build设与ant邮编任务
  3. 或者,拉链不能presreve权限,将永远unzip没有x的权限。

您无法将Linux / Unix文件权限存储在ZIP文件中。

编辑(注释之后)通过使用ZIP头中的“外部属性”字段,这些属性可以存储在一个ZIP文件中。 GNU的unzip显然能够读取额外的字段和恢复文件的权限。 我不知道这是什么时候加入到ZIP格式,因为早期的版本 – 来自MS-DOS的世界 – 没有这方面的支持。

TAR格式(作为“本地”Unix / Linux格式)被设计为包含文件属性,而Ant可以创建TAR文件来保留所有Linux / Unix操作系统的属性。

 <tar compression =“gzip”destfile =“my-archive.tgz”>
   <tarfileset mode =“544”dir =“dir_with_shell_scripts”>
      <include name =“*。sh”/>
   </ tarfileset>
 </焦油>

您不必切换到tar文件。 我不知道为什么不认识蚂蚁的人为此提供建议。

使用zipfileset的filemode参数。 记录在http://ant.apache.org/manual/Types/zipfileset.html

现代Linux发行版中的zip / unzip将保留文件权限。 但是你需要确保窗口中的压缩文件符合这个要求。

如果您使用tar文件而不是zip文件,则应该为您保留权限。 文件的所有者和组可能不匹配,但权限位将会。

我想你可以用Apache Commons Compress来做到这一点。

第一段:

访问内部和外部属性(用于通过一些zip实现存储Unix权限)。

看看API并查找setUnixMode()

 <shellscript shell="sh" dir="abc" failonerror="true"> zip -ry abc.zip * </shellscript> 

上面的ant脚本调用一个shell脚本来创建其中权限保存得很好的zip文件。 它适用于Ant 1.7及以上版本。 不过,我还没有尝试验证在Windows上运行这个蚂蚁脚本。 这在Mac上运行得很好。