web-dev-qa-db-fra.com

Utilisation de ant pour détecter os et définir la propriété

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.

42
egesuato

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>
23
Drejc

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

12
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/"/>
5
Roberg

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>
5
elkoo

Essayez de définir <sysproperty key="foobar" value="fowl"/> dans votre tâche Java . Ensuite, dans votre application, utilisez System.getProperty ("foobar");

1
lyates

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>
0
Mig82

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

0
N D