解压缩时使用ant保留文件权限和压缩文件

时间:2010-03-02 18:21:51

标签: ant build-process zip unzip

我正在编写一个ant build.xml文件,它执行以下操作:

  • 采用压缩文件夹(.zip)
  • 解压缩
  • 添加多个文件
  • 压缩生成的文件

build.xml中的代码摘录:

<!-- Unzip SDK to a temporary directory -->
<unzip src="${zipFile}" dest="tmp"/>

<!-- pull in the files from another directory -->
<copy todir="tmp/someDirectory" >
  <fileset dir="${addedFiles}" />
</copy>

<!-- Zip up modified SDK -->
<zip destfile="${destDir}" basedir="tmp"/>

这一切都很完美,除了在运行ant构建之前为压缩文件设置的权限在ant build创建的zip文件中丢失。例如,以前可执行的文件不再是。

所以我的问题:是否可以使用ant将文件添加到zip存档而不破坏已存在文件的权限?

我正在使用Ant 1.7.1

4 个答案:

答案 0 :(得分:9)

使用Ant解压缩目标时遇到了同样的问题:

<unzip src="${project.build.directory}/${project.build.finalName}.zip" dest="${user.home}/apps" overwrite="true" />

使用上面的解压缩目标时,zip文件中的shell脚本权限丢失了。

经过一些调查后,我使用跟随'exec'的ant目标解压缩命令行参数,它有效。

<!-- Use command line unzip to keep file permissions -->
<exec executable="unzip" spawn="true">
    <arg line="-o ${project.build.directory}/${project.build.finalName}.zip -d ${user.home}/apps" />
</exec>

我希望在遇到这类问题时,这可以帮助别人。

谢谢, Ĵ

答案 1 :(得分:7)

您无法获取zip任务以保留文件权限,但您可以明确设置它们:

<zip destfile="installer.zip" >
<zipfileset filemode="755" dir="../" includes="artisan/install.*" />
</zip>

(这适用于Windows和OSX)

答案 2 :(得分:3)

事实证明,由于Java的限制,ant会在解压缩时销毁所有权限信息。但是,可以将文件添加到现有zip文件中,该文件保留现有文件的权限:

<!-- Add to zip -->
<zip destfile="${existingZipFiledirectory}.zip"
   basedir="${directoryOfFilesToAdd}"
   update="true"
/>

上述脚本将更新使用basedir中的内容指定的zip文件,保留原始zip中的文件权限。

答案 3 :(得分:-1)

据我所知,此功能(preserve0permissions)是随Ant 1.8引入的。以前版本的Ant没有保留权限。

如果你坚持使用Ant 1.7.1,你可以使用Tar - 如果我没有记错 - 存储权限。