Сохраните права доступа к файлам при распаковке и архивирование файлов с помощью ant - PullRequest
10 голосов
/ 02 марта 2010

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

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

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

Ответы [ 4 ]

9 голосов
/ 08 декабря 2011

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

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

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

После некоторого исследования я использую следующую цель 'exec' с параметрами командной строки 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>

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

Спасибо, J

7 голосов
/ 03 июля 2013

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

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

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

3 голосов
/ 04 марта 2010

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

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

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

0 голосов
/ 03 марта 2010

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

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

...