Como posso usar a tarefa de alcatrão de formiga e preservar as permissões de arquivos?

StackOverflow https://stackoverflow.com/questions/1517297

  •  19-09-2019
  •  | 
  •  

Pergunta

Claro que pode ser feito usando o exec task, mas minha pergunta é:

É possível fazer isso usando a tarefa alcatrão?

Foi útil?

Solução

Eu não acho que exista uma maneira de manter as permissões existentes, de acordo com esta nota do copiar tarefa:

NOTA UNIX: As permissões de arquivo não são retidas quando os arquivos são copiados; Eles acabam com as permissões padrão do UMAk. Isso é causado pela falta de qualquer meio de consultar ou definir permissões de arquivo no atual Java RunTimes. Se você precisar de uma função de cópia de preservação de permissão, use <exec executable="cp" ... > em vez de.

No entanto, o Tarefa alcatrão pode levar um ou mais tarfileset elementos. o tarfileset pode ser definido com um filemode e/ou dirmode atributo para especificar as permissões do UNIX. Se você especificar múltiplas incluir a correspondência apenas desses arquivos para obter cada conjunto de permissões necessárias, os arquivos nesse conjunto serão incluídos nessas permissões.

Outras dicas

Essa falta de permissão torna a tarefa de alcatrão de formiga quase inútil para mim. Não há como fazer isso sem executar o alcatrão do sistema operacional com o tarefa executiva:

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

Existem binários GNU TAR para quase todos os sistemas operacionais conhecidos pelo homem. Coloque um deles no seu sistema de controle de versão e use -o dependendo do seu sistema operacional. Sim, a Ant precisará bifurcar um processo toda vez que for executado.

Usar Tarfileset funcionou para o nosso projeto. Aqui está um exemplo de funcionamento, caso alguém precise:

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

Neste exemplo, o Incluirelist.txt é usado para informar quais arquivos incluir no arquivo TAR. Todos os arquivos com extensão *.sh terão permissão de ler e executar (550) para o usuário e o grupo.

Espero que isso ajude alguém.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top