¿Puedo hacer que la tarea de copia Ant sea específica del sistema operativo?

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

  •  01-07-2019
  •  | 
  •  

Pregunta

Tengo un script Ant que realiza una operación de copia usando el tarea de 'copiar'.Fue escrito para Windows y tiene una ruta C:\ codificada como argumento 'todir'.Veo que la tarea 'ejecutiva' tiene un argumento de sistema operativo. ¿Existe una forma similar de bifurcar una copia según el sistema operativo?

¿Fue útil?

Solución

Recomendaría poner la ruta en una propiedad y luego configurar la propiedad de forma condicional según el sistema operativo actual.

<condition property="foo.path" value="C:\Foo\Dir">
   <os family="windows"/>
</condition>
<condition property="foo.path" value="/home/foo/dir">
   <os family="unix"/>
</condition>

<fail unless="foo.path">No foo.path set for this OS!</fail>

Como beneficio adicional, una vez que esté en una propiedad, puede anularla sin editar el script Ant.

Otros consejos

Las sugerencias publicadas anteriormente de una variable específica del sistema operativo funcionarán, pero muchas veces simplemente puede omitir el prefijo "C:" y usar rutas de archivos con barras diagonales (estilo Unix) y funcionará tanto en sistemas Windows como Unix.

Entonces, si desea copiar archivos a "C:/tmp" en Windows y "/tmp" en Unix, puede usar algo como:

<copy todir="/tmp" overwrite="true" >
         <fileset dir="${lib.dir}">
             <include name="*.jar" />
         </fileset>
</copy>

Si desea/necesita establecer una ruta condicional basada en el sistema operativo, se puede simplificar como:

    <condition property="root.drive" value="C:/" else="/">
        <os family="windows" />
    </condition>
    <copy todir="${root.drive}tmp" overwrite="true" >
             <fileset dir="${lib.dir}">
                 <include name="*.jar" />
             </fileset>
    </copy>

Podrías usar la tarea de condición para pasar a diferentes tareas de copia...del manual de hormigas:

<condition property="isMacOsButNotMacOsX">
<and>
  <os family="mac"/>

  <not>
    <os family="unix"/>

  </not>
</and>

Declare una variable que sea la carpeta raíz de su operación.Prefije sus carpetas con esa variable, incluso en la tarea de copia.

Configure la variable según el sistema operativo mediante un condicional o pásela como argumento al script Ant.

¿No puedes usar una variable y asignarla según el tipo?Podrías ponerlo en un build.properties archivo.O podrías asignarlo usando un condición.

Ant-contrib tiene la tarea <osfamily />.Esto expondrá la familia del sistema operativo a una propiedad (cuyo nombre especifica).Esto podría ser de algún beneficio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top