10

我正在编写一个 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 构建创建的 zip 文件中丢失了。例如,以前可执行的文件不再是。

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

我正在使用 Ant 1.7.1

4

4 回答 4

9

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

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

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

经过一番调查,我使用带有解压缩命令行参数的follow '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>

我希望这可以在遇到此类问题时对其他人有所帮助。

谢谢,J

于 2011-12-08T05:53:35.180 回答
8

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

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

(这在 Windows 和 OSX 上对我有用)

于 2013-07-03T16:08:48.860 回答
3

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

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

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

于 2010-03-04T12:28:52.033 回答
-1

据我所知,这个特性(preserve0permissions)是在Ant 1.8中引入的。以前版本的 Ant 没有保留这些权限。

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

于 2010-03-03T20:05:01.377 回答