ant - sistema - tipos de particiones de disco duro
Usando hormiga para detectar os y establecer propiedad (8)
Mueva su condición fuera del <target />
, ya que su objetivo probablemente no se invoque.
<condition property="isWindows">
<os family="windows" />
</condition>
<condition property="isLinux">
<os family="unix" />
</condition>
Quiero establecer una propiedad en una tarea de hormiga de manera diferente por tipo de sistema operativo.
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 todos mis objetivos ant, he agregado un "depends = checksw_path".
Si ejecuto el objetivo predeterminado en Windows, tengo correctamente "c: / flag" pero si ejecuto un destino no predeterminado, tengo que la depuración va en if_windows, pero la instrucción "" no establece la propiedad que permanece / opt / flag. Estoy usando hormiga 1.7.1.
Resolví ejecutar la tarea ant con el valor de sw.root usando -Dsw.root = c: / flag (para windows) o -Dsw.root = / opt / superwaba (para linux).
Gracias de todos modos
Intente configurar <sysproperty key="foobar" value="fowl"/>
en su tarea java. Luego, en su aplicación, use System.getProperty ("foobar");
Debe establecer el valor "verdadero" en la propiedad para que la condición if funcione. Vea el código a continuación:
<target name="checkos">
<condition property="isWindows" value="true">
<os family="windows" />
</condition>
<condition property="isLinux" value="true">
<os family="unix" />
</condition>
</target>
HTH, Hari
Primero, debe establecer una variable en verdadero o falso en función del sistema operativo (SO):
<condition property="IS_WINDOWS" value="true" else="false">
<os family="windows"/>
</condition>
Entonces quieres activar tu lógica usando la variable. Para eso puedes encontrar la respuesta aquí:
http://boulderapps.co/running-different-ant-tasks-depending-on-the-operating-system
Utilicé ese script 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>
Si desea establecer esa propiedad individual basada en el SO, también puede configurarla directamente sin la necesidad de crear 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/"/>
Al usar Ant Contrib puede simplificar su archivo de compilación reduciendo la cantidad de elementos 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>