arquivo tar e gerado perfeitamente, porem sem as permissoes herdadas de cada arquivo, e sim com permissoes genericas.Exemplo:[Este exemplo nao faz o que pretendemos][arquivos compilados e copiados para a pasta "build"]<tar destfile="pacote.tar"> <fileset dir="build" includes="**/*"/></tar>A Solucao do ProblemaFinalmente, existem algumas opcoes que podem resolver o problema. Vamos a elas.1- Usando o Programa tar de seu LinuxEsta sabemos que nao e a melhor opcao, embora funcione. Atraves da task exec, o Ant permite a execucao de um programa externo, inclusive passando parametros (argumentos) para o mesmo (mais sobre esta task aqui).O exemplo abaixo indica como chamar o programa tar de um script Ant, passando argumentos que indicam o que deve ser empacotado (diretorio ".") e uma lista de arquivos a serem excluidos. O problema e que, como o programa tar normalmente so existe em ambientes Linux, para evitar erros, a task e instruida a so executar se este ambiente for detectado. Esta deteccao, internamente, e feita pela propriedade de sistema "os.name".[Este exemplo nao e a melhor opcao]<exec executable="tar" output="/dev/null" os="Linux"> <arg value="--exclude-from=arquivos_a_excluir.txt"/> <arg value="-cvz"/> <arg value="--file=${pacote.tar}"/> <arg value="."/></exec>A fragilidade desta opcao e que, dependendo de um programa externo, ela nao funciona em qualquer plataforma. Se voce constroi seu sistema sozinho ou se a sua equipe tem o ambiente todo padronizado, entao ela pode ser usada. Caso contrario, voce teria que criar tantas task exec quanto sistemas usados por sua equipe, e torcer para que, em cada sistema, todos tenham o programa tar no mesmo lugar (ou no PATH).1- A Forma CorretaA maneira abaixo despreza chamadas para programas externas e constroi a solucao ideal. Como isto e possivel??Simples, meu caro Watson: substituimos (ou incluimos) a tag (elemento) fileset pela tag tarfileset. Esta tag e especifica da task tar e herda de fileset. Esta faz o mesmo que aquela, ou seja, define uma lista de arquivos para serem considerados, porem com duas propriedades (atributos) a mais, a saber:- filemode: define as permissoes de arquivo Linux que os arquivos incluidos nesta tag deverao ter apos incluidos no pacote tar, independente de os arquivos originais terem ou nao estas permissoes.- dirmode: faz o mesmo, porem para diretorios.Assim, e possivel se manter ou mesmo trocar as permissoes de arquivos no momento de serem empacotados no pacote tar. Evidentemente, devido a esta arquitetura de trabalho, o pacote tar sera formado como desejado mesmo que voce esteja rodando o script Ant de ambiente Windows, que nao suporta as permissoes de arquivos Linux. Ou seja: funciona em qualquer plataforma, por mais louca que seja a maneira como ela armazena seus arquivos.Veja na pratica como funciona, pelo exemplo abaixo:[Este exemplo e o recomendavel]<tar destfile="pacote.tar"> <fileset dir="build" includes="**/*" excludes="build/script.sh"/> <tarfileset dir="build" includes="build/script.sh" filemode="755"/></tar> No exemplo, selecionamos os arquivo que nao sao executaveis dentro do elemento fileset, como e feito normalmente. Porem, excluimos o unico arquivo diferente, o que queremos que seja um executavel. Logo abaixo, incluimos o arquivo executavel, porem agora utilizando o elemento (tag) tarfileset, que esta instruido a adiciona-lo ao pacote usando as permissoes 755.Como vimos acima, as permissoes sao representadas por 3 algarismos octais. Os atributos filemode e dirmode de