我可以将unix权限存储在zip文件(由apache ant构建)中吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以将unix权限存储在zip文件(由apache ant构建)中吗?相关的知识,希望对你有一定的参考价值。
我正在为Java应用程序构建Linux安装程序,最后得到的是install.jar和setup.sh,并使用ant将其放入了zip文件。
这个想法是用户解压缩该zip文件,然后运行setup.sh,但麻烦的是,他们总是始终需要先chmod setup.sh才能赋予自己执行权限。
我想删除此步骤,我不确定问题是否存在:
- 该即时通讯在Windows上构建
- 我正在使用蚂蚁压缩任务构建
- 否则该zip不能预先获得权限,并且在没有x权限的情况下始终会解压缩。
您不能在ZIP文件中存储Linux / Unix文件权限。
编辑(在注释后添加)这些属性可以存储在ZIP文件中。 GNU的unzip
显然能够读取该附加字段并恢复文件权限。 我不确定何时将其添加到ZIP格式中,因为早期版本-来自MS-DOS世界-不支持此功能。
TAR格式-一种“本机” Unix / Linux格式-旨在包括文件属性,Ant可以创建TAR文件,该文件将在所有Linux / Unix操作系统上保留属性。
tarfileset> tar>
您不必切换到tar文件。我不知道为什么不认识Ant的人会为此主题提供建议。
使用zipfileset的filemode参数。记录在http://ant.apache.org/manual/Types/zipfileset.html
我认为您可以使用Apache Commons Compress完成此操作。
第一段:
访问内部和外部属性(某些zip实现用于存储Unix权限)。
[查看API并查找setUnixMode()
zip / unzip在现代linux发行版中将保留文件权限。但是,您需要确保Windows中的zip压缩此名称。
如果您使用的是tar文件而不是zip文件,它应该为您保留权限。文件的所有者和组可能不匹配,但是权限位将匹配。
要扩展Blaine的答案,您可以使用<zipfileset>子元素来指定权限:
<zip destfile="build/MyApplication.zip" encoding="UTF-8">
<zipfileset dir="${content-dir}" encoding="UTF-8"
includes="**/setup.sh" filemode="755"/>
<zipfileset dir="${content-dir}" encoding="UTF-8"
excludes="**/setup.sh"/>
</zip>
<shellscript shell="sh" dir="abc" failonerror="true">
zip -ry abc.zip *
</shellscript>
上面的ant脚本调用一个shell脚本来创建zip归档文件,在其中很好地保留了权限。它适用于Ant 1.7及更高版本。但是我还没有尝试过验证在Windows上运行此ant脚本。在Mac上,效果很好。
以上是关于我可以将unix权限存储在zip文件(由apache ant构建)中吗?的主要内容,如果未能解决你的问题,请参考以下文章