2009-10-04 7 views

Respuesta

12

No creo que hay una manera de retener los permisos existentes, por esta nota de la copy task:

Unix Nota: Los permisos de archivo no se conservan cuando se copian archivos; terminan con los permisos UMASK predeterminados en su lugar. Esto se debe a la falta de medios para consultar o establecer permisos de archivos en los tiempos de ejecución de Java actuales. Si necesita una función de copia de preservación de permisos, use <exec executable="cp" ... > en su lugar.

Sin embargo, el tar task puede tomar uno o más elementos tarfileset. El tarfileset se puede definir con un atributo filemode y/o dirmode para especificar los permisos de unix. Si especifica que múltiple incluye emparejar solo esos archivos para obtener cada conjunto de permisos requeridos, los archivos en ese conjunto se incluirán con esos permisos.

11

Esta falta de permiso hace que la tarea ant tar sea casi inútil para mí. No hay manera de hacerlo sin ejecutar el alquitrán sistema operativo con la tarea ejecutivo:

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

Hay binarios de GNU tar para casi todos los sistemas operativos conocidos por el hombre. Coloque uno de ellos en su sistema de control de versiones y úselo de acuerdo con su sistema operativo. Sí, Ant tendrá que bifurcar un proceso cada vez que se ejecute.

+0

¿Por qué ha bajado este valor? Solución perfecta para este problema - votaciones en contra – purecharger

+3

Probablemente fue downvoted porque el contestador no leyó la pregunta: "Por supuesto que se puede hacer mediante la tarea ejecutiva" –

+0

ant tar es completamente inútil. Entiendo por qué (java no puede leer permisos de archivos o algo de basura), pero eso no hace que sea útil tener todos mis permisos reescritos solo porque quiero tar. Esta debería ser la respuesta correcta. – Chris

6

Utilizando el archivo tarfileset trabajado para nuestro proyecto. Aquí está un ejemplo de trabajo en caso de que alguien lo necesita:

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

En este ejemplo, includelist.txt se utiliza contar a los archivos que desea incluir en el archivo tar. Todos los archivos con la extensión * .sh tendrán permiso de lectura y ejecución (550) para el usuario y el grupo.

Espero que esto ayude a alguien.

+0

Déjame adivinar: ivy + git repositories? Porque eso es lo que me llevó a esta pregunta. – bassim

+0

¡esta debería ser la respuesta! esta es la forma correcta de hacerlo –

Cuestiones relacionadas