Как использовать задачу Ant tar и сохранять права доступа к файлам?

Конечно, это можно сделать с помощью exec task, но мой вопрос:

Можно ли это сделать с помощью задачи tar?

Ответ 1

Я не думаю, что есть способ сохранить существующие разрешения для этой заметки из задачи копирования:

Unix Примечание. Разрешения для файлов не сохраняются при копировании файлов; вместо этого они получают разрешения UMASK по умолчанию. Это вызвано отсутствием каких-либо средств для запроса или установки прав доступа к файлам в текущем времени выполнения Java. Если вам нужна функция копирования, сохраняющая разрешение, используйте <exec executable="cp" ... >.

Однако задача tar может принимать один или несколько tarfileset. tarfileset можно определить с помощью атрибута filemode и/или dirmode, чтобы указать разрешения unix. Если вы укажете, что несколько включили совпадение только этих файлов для получения каждого набора необходимых разрешений, файлы в этом наборе будут включены с этими разрешениями.

Ответ 2

Это отсутствие разрешения делает задачу ant tar почти бесполезной для меня. Нет способа сделать это без выполнения деактивации операционной системы с задачей exec:

    <exec executable="tar" output="/dev/null" os="Linux">
        <arg value="--exclude-from=files_to_exclude.txt"/>
        <arg value="-cvz"/>
        <arg value="--file=${file.tar}"/>
        <arg value="."/>
    </exec>

Существуют бинарные файлы gnu для почти всех операционных систем, известных человеку. Поместите одну из них в вашу систему контроля версий и используйте ее в зависимости от вашей операционной системы. Да, ant необходимо будет разветвлять процесс каждый раз, когда он запускается.

Ответ 3

Использование tarfileset для нашего проекта. Вот рабочий пример, если кому-то это нужно:

    <tar destfile="${dist}/${module.name}-${version}.tar">
        <tarfileset dir="${package.dir}" filemode="550" includesfile="${home.dir}/includelist.txt">
            <include name="*.sh"/>
        </tarfileset>
    </tar>

В этом примере, includeelist.txt используется, чтобы указать, какие файлы должны быть включены в файл tar. Все файлы с расширением *.sh будут иметь разрешение "Чтение и выполнение" (550) для пользователя и группы.

Надеюсь, это поможет кому-то.