Question

J'ai un script Ant qui effectue une opération de copie à l'aide de la tâche "Copier" . Il a été écrit pour Windows et possède un chemin C: \ codé en dur comme argument 'todir'. Je vois que la tâche 'exec' a un argument de système d'exploitation. Existe-t-il une méthode similaire pour créer une branche sur une copie basée sur le système d'exploitation?

Était-ce utile?

La solution

Je recommanderais de placer le chemin d'accès dans une propriété, puis de définir la propriété de manière conditionnelle en fonction du système d'exploitation actuel.

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

En guise d’avantage, une fois dans une propriété, vous pouvez la remplacer sans modifier le script Ant.

Autres conseils

Les suggestions précédemment affichées d’une variable spécifique au système d’exploitation fonctionneront, mais vous pouvez souvent omettre le " C: " préfixe et utilisez les chemins de fichier barres obliques (style Unix) et il fonctionnera à la fois sur les systèmes Windows et Unix.

Donc, si vous voulez copier des fichiers vers " C: / tmp " sous Windows et " / tmp " sous Unix, vous pourriez utiliser quelque chose comme:

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

Si vous souhaitez / devez définir un chemin conditionnel basé sur le système d'exploitation, vous pouvez le simplifier comme suit:

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

Vous pouvez utiliser la tâche de condition pour passer à différentes tâches de copie ... à partir du manuel ant:

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

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

  </not>
</and>

Déclarez une variable qui est le dossier racine de votre opération. Préfixez vos dossiers avec cette variable, y compris dans la tâche de copie.

Définissez la variable basée sur le système d'exploitation à l'aide d'une condition, ou transmettez-la en tant qu'argument au script Ant.

Vous ne pouvez pas utiliser une variable et l’affecter en fonction du type? Vous pouvez le mettre dans un fichier build.properties. Vous pouvez également l'attribuer à l'aide d'une condition .

Ant-contrib a le < osfamily / > tâche. Cela exposera la famille du système d'exploitation à une propriété (dont vous spécifiez le nom). Cela pourrait être bénéfique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top