Сохранить права доступа к файлам при распаковке и архивации файлов с помощью ant

Я пишу сборку муравьев.XML-файл, который делает следующее:

  • берет папку на молнии (.zip)
  • расстегивает его
  • добавляет ряд файлов
  • застегивает результирующие файлы

извлечение кода из сборки.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, теряются в zip-файле, созданном сборкой ant. Для например, файлы, которые ранее были исполняемыми, больше не являются.

Итак, мой вопрос: Можно ли использовать ant для добавления файлов в zip-архив без уничтожения разрешений уже существующих файлов?

Я использую Ant 1.7.1

4 ответов


я столкнулся с той же проблемой при использовании Ant unzip target:

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

разрешение сценариев оболочки внутри zip-файла было потеряно при использовании цели unzip выше.

после некоторого исследования я использую следующую цель "exec" ant с параметрами командной строки unzip, это сработало.

<!-- 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>

Я надеюсь, что это может помочь кому-то еще при возникновении такого рода проблем.

спасибо, Джей


вы не можете получить задачу zip для сохранения разрешений файла, но вы можете установить их явно:

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

(это сработало для меня в Windows и OSX)


оказывается, что ant уничтожит всю информацию о разрешениях при распаковке из-за ограничения в Java. Однако можно добавить файлы в существующий zip-файл, который сохраняет разрешения существующих файлов:

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

вышеупомянутый скрипт обновит zip-файл, указанный с содержимым в basedir, сохранив разрешения файла в исходном zip.


насколько я знаю, эта функция (preserve0permissions) была введена с Ant 1.8. Предыдущие версии Ant не сохранили разрешения.

Если вы застряли с Ant 1.7.1, вы можете использовать Tar, который-если я не ошибаюсь - хранит разрешения.