2008-09-17 8 views

Respuesta

31

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 anularlo sin editar el script Ant.

+0

¿No hay una forma de declarar una ruta en Ant que se trate de manera igual en Windows y Linux? Tengo curiosidad. –

1

No puede usar una variable y asignarla según el tipo? Puede ponerlo en un archivo build.properties. O puede asignarlo usando un condition.

2

usted podría utilizar la tarea condición se ramifique a diferentes tareas de copia ... del manual ant:

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

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

    </not> 
</and> 

1

declarar una variable que es la carpeta raíz de la 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.

6

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

lo tanto, si desea copiar los archivos a "C:/tmp" en Windows y "/ tmp" en Unix, se podrían usar algo como:

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

Si desea/necesita para establecer un camino condicional basada en el sistema operativo, puede ser simplificado 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> 
0

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.

Cuestiones relacionadas