Je souhaite définir une propriété dans une tâche ant différemment par type d'os.
La propriété est un répertoire, dans Windows, je veux que ce soit "c:\flag" dans unix/linux "/ opt/flag".
Mon script actuel ne fonctionne que lorsque je l'exécute avec la cible par défaut, mais pourquoi?
<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>
Dans toutes mes cibles de fourmis, j'ai ajouté un "depend = checksw_path".
Si j’exécute la cible par défaut dans Windows, j’ai correctement "c:\flag", mais si j’exécute une cible non définie par défaut, le débogage va dans if_windows mais l’instruction "" ne définit pas la propriété restante/opt/flag. J'utilise ant 1.7.1.
Déplacez votre condition hors du <target />
, car votre cible n'est probablement pas invoquée.
<condition property="isWindows">
<os family="windows" />
</condition>
<condition property="isLinux">
<os family="unix" />
</condition>
Vous devez définir la valeur "true" sur la propriété pour que la condition if fonctionne. Voir le code ci-dessous:
<target name="checkos">
<condition property="isWindows" value="true">
<os family="windows" />
</condition>
<condition property="isLinux" value="true">
<os family="unix" />
</condition>
</target>
HTH, Hari
Si vous souhaitez définir cette propriété unique en fonction du système d'exploitation, vous pouvez également la définir directement sans qu'il soit nécessaire de créer des tâches:
<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/"/>
J'ai utilisé ce script et cela a bien fonctionné pour moi:
<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>
Essayez de définir <sysproperty key="foobar" value="fowl"/>
dans votre tâche Java . Ensuite, dans votre application, utilisez System.getProperty ("foobar");
En utilisant Ant Contrib vous pouvez simplifier votre fichier de construction en réduisant le nombre d'éléments à déclarer pour ajouter ces conditions.
<!--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>
Tout d'abord, vous souhaitez définir une variable sur true ou false en fonction du système d'exploitation:
<condition property="IS_WINDOWS" value="true" else="false">
<os family="windows"/>
</condition>
Ensuite, vous voulez déclencher votre logique en utilisant la variable. Pour cela, vous pouvez trouver la réponse ici:
http://boulderapps.co/running-different-ant-tasks-depending-on-the-operating-system