sirve - compilacion con ant
¿Puedo hacer que la tarea de copia Ant sea específica del sistema operativo? (6)
Declare una variable que es la carpeta raíz de su operación. Prefija sus carpetas con esa variable, incluso en la tarea de copia.
Establezca la variable en función del sistema operativo utilizando un condicional, o páselo como argumento al script Ant.
Tengo un script Ant que realiza una operación de copia usando la tarea ''copiar'' . Fue escrito para Windows, y tiene una ruta C: / como el argumento ''todir''. Veo que la tarea ''ejecutiva'' tiene un argumento de sistema operativo. ¿Hay alguna forma similar de ramificar una copia basada en el sistema operativo?
Puede usar la tarea de condición para ramificarse a diferentes tareas de copia ... del manual de hormiga:
<condition property="isMacOsButNotMacOsX">
<and>
<os family="mac"/>
<not>
<os family="unix"/>
</not>
</and>
Yo recomendaría poner la ruta en una propiedad, luego establecer la propiedad condicionalmente en base al 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.
Las sugerencias publicadas anteriormente de una variable específica del sistema operativo funcionarán, pero muchas veces simplemente puede omitir el prefijo "C:" y utilizar las barras diagonales (estilo Unix) y funcionará tanto en sistemas Windows como en Unix.
Entonces, si quiere copiar archivos a "C: / tmp" en Windows y "/ tmp" en Unix, podría 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>
Ant-contrib tiene la tarea <osfamily />. Esto expondrá a la familia del sistema operativo a una propiedad (que especifica el nombre de). Esto podría ser de algún beneficio.
No puede usar una variable y asignarla según el tipo? Podrías ponerlo en un archivo build.properties
. O podrías asignarlo usando una condición .