2009-01-17 9 views
36

Quiero establecer una propiedad en una tarea ant de forma diferente por tipo de sistema operativo.Usar ant para detectar el sistema operativo y establecer la propiedad

La propiedad es un directorio, en Windows quiero que sea "c: \ flag" en unix/linux "/ opt/flag".

Mi secuencia de comandos actual solo funciona cuando la ejecuto con el objetivo predeterminado, pero ¿por qué?

<target name="checksw_path" depends="if_windows, if_unix"/> 

<target name="checkos"> 
    <condition property="isWindows"> 
     <os family="windows" /> 
    </condition> 

    <condition property="isLinux"> 
     <os family="unix" /> 
    </condition> 
</target> 

<target name="if_windows" depends="checkos" if="isWindows"> 
    <property name="sw.root" value="c:\flag" /> 
    <echo message="${sw.root}"/> 
</target> 

<target name="if_unix" depends="checkos" if="isLinux"> 
    <property name="sw.root" value="/opt/flag" /> 
    <echo message="${sw.root}"/> 
</target> 

En todas mis tareas ant He añadido un "depende = checksw_path".

Si ejecuto el destino predeterminado en Windows tengo correctamente "c: \ flag", pero si ejecuto un destino no predeterminado tengo que la depuración va en las if_windows, pero la instrucción "" no establece la propiedad que permanece/opt/flag. Estoy usando hormiga 1.7.1.

Respuesta

-3

Solucioné ejecutar la tarea ant con el valor de sw.root usando -Dsw.root = c: \ bandera (para Windows) o -Dsw.root =/opt/SuperWaba (para Linux).

De todos modos, gracias

20

Mueva su condición fuera del <target />, ya que probablemente su objetivo no se invoque.

<condition property="isWindows"> 
        <os family="windows" /> 
</condition> 

<condition property="isLinux"> 
        <os family="unix" /> 
</condition> 
1

intente configurar <sysproperty key="foobar" value="fowl"/> en su tarea de Java. Luego, en su aplicación, use System.getProperty ("foobar");

12

Debe establecer el valor "verdadero" en la propiedad para que la condición if funcione. Ver el código de abajo:

<target name="checkos"> 
    <condition property="isWindows" value="true"> 
      <os family="windows" /> 
    </condition> 

    <condition property="isLinux" value="true"> 
      <os family="unix" /> 
    </condition> 
</target> 

HTH, Hari

2

Solía ​​tales guión y funcionó bien para mí:

<project name="dir" basedir="."> 

    <condition property="isWindows"> 
    <os family="windows" /> 
    </condition> 

    <condition property="isUnix"> 
    <os family="unix" /> 
    </condition> 

    <target name="setWindowsRoot" if="isWindows"> 
    <property name="root.dir" value="c:\tmp\" /> 
    </target> 

    <target name="setUnixRoot" if="isUnix"> 
    <property name="root.dir" value="/i0/" /> 
    </target> 

    <target name="test" depends="setWindowsRoot, setUnixRoot"> 
    <mkdir dir="${root.dir}" /> 
    </target> 

</project> 
2

Si desea establecer que la única propiedad basado en el sistema operativo, se puede establecer directamente, así, sin la necesidad de la creación de tareas:

<condition property="sw.root" value="c:\flag"> 
    <os family="windows" /> 
</condition> 

<condition property="sw.root" value="/opt/flag"> 
     <os family="unix" /> 
</condition> 

<property name="sw.root" value="/os/unknown/"/> 
0

mediante el uso de Ant Contrib puede simplificar su fichero de construcción mediante la reducción de la cantidad de elemen ts que necesita declarar para agregar estas condiciones.

<!--Tell Ant to define the Ant Contrib tasks from the jar--> 
<taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
    <classpath> 
     <pathelement location="path/to/ant-contrib-0.6.jar"/> 
    </classpath> 
</taskdef> 

<!--Do your OS specific stuff--> 
<target name="checkos"> 
    <if> 
     <os family="unix"/> 
     <then> 
      <!--Do your Unix stuff--> 
     </then> 
     <elseif> 
      <os family="windows"/> 
      <then> 
       <!--Do your Windows stuff--> 
      </then> 
     </elseif> 
    </if> 
</target> 
Cuestiones relacionadas