2012-04-03 12 views
5

Soy consciente de que puedo <exec executable="cp" failonerror="true">, sin embargo, preferiría tener una tarea a la que pueda llamar desde cualquier sistema operativo que pueda usar todo (o al menos la mayoría) de los atributos a copy, pero que no absorbe los permisos en Unix.Hay una tarea ant que puede copiar sin perder permisos

Me pregunto si ya hay una solución, o tendré que escribir mi propia copy2.

Como tenía algo de miedo, no hay nada "improvisado". Tenemos este código, pero solo maneja la copia de directorio a directorio o copia de archivo a archivo, tiene atributos personalizados, y no hace ninguna de las otras cosas ordenadas que copia.

<!-- ==================================================================== --> 
<!-- Copy files from A to B            --> 
<!-- <copy> would do this job, if it weren't such a useless pile of fail --> 
<!-- and could manage to preserve execute bits on Linux     --> 
<!-- ==================================================================== --> 
<macrodef name="internal-copydir"> 
    <attribute name="fromdir" default="NOT SET" /> 
    <attribute name="todir" default="NOT SET" /> 
    <sequential> 
     <if> 
      <os family="windows" /> 
      <then> 
       <copy todir="@{todir}"> 
        <fileset dir="@{fromdir}" /> 
       </copy> 
      </then> 
      <else> 
       <exec executable="rsync" failonerror="true"> 
        <arg value="-a" /> 
        <arg value="@{fromdir}/" /> 
        <arg value="@{todir}/" /> 
       </exec> 
      </else> 
     </if> 
    </sequential> 
</macrodef> 

<!-- ==================================================================== --> 
<!-- Copy file from A to B            --> 
<!-- <copy> would do this job, if it weren't such a useless pile of fail --> 
<!-- and could manage to preserve execute bits on Linux     --> 
<!-- ==================================================================== --> 
<macrodef name="internal-copyfile"> 
    <attribute name="file" default="NOT SET" /> 
    <attribute name="tofile" default="NOT SET" /> 
    <sequential> 
     <if> 
      <os family="windows" /> 
      <then> 
       <copy file="@{file}" tofile="@{tofile}"/> 
      </then> 
      <else> 
       <exec executable="cp" failonerror="true"> 
        <arg value="@{file}" /> 
        <arg value="@{tofile}" /> 
       </exec> 
      </else> 
     </if> 
    </sequential> 
</macrodef> 

Escribí esto también.

<!-- ==================================================================== --> 
<!-- Copy file to a directory            --> 
<!-- <copy> would do this job, if it weren't such a useless pile of fail --> 
<!-- and could manage to preserve execute bits on Linux     --> 
<!-- ==================================================================== --> 
<macrodef name="internal-copyfiletodir"> 
    <attribute name="file" default="NOT SET" /> 
    <attribute name="todir" default="NOT SET" /> 
    <sequential> 
     <if> 
      <os family="windows" /> 
      <then> 
       <copy file="@{file}" todir="@{todir}"/> 
      </then> 
      <else> 
       <exec executable="cp" failonerror="true"> 
        <arg value="@{file}" /> 
        <arg value="@{todir}/" /> 
       </exec> 
      </else> 
     </if> 
    </sequential> 
</macrodef> 

Respuesta

3

No conozco ninguno. Como se menciona en la documentación de Ant, esto se debe a que no había ningún mecanismo para manipular los permisos de archivos en el JRE. Ant Copy task

Java 7 ofrece una compatibilidad mucho mejor para este tipo de cosas, por lo que quizás en una versión futura de Ant esto sea posible. Esto probablemente demorará mucho tiempo, ya que creo que Ant solo se está moviendo a Java 5 para la versión 1.9.

Supongo que es posible que pueda simular el comportamiento que busca mediante la ejecución condicional de comandos específicos del sistema operativo basados ​​en el sistema operativo.

Cuestiones relacionadas