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