web-dev-qa-db-fra.com

Comment définir la variable d'environnement de chemin à partir de script ant

Comment définir la variable d'environnement de chemin à partir de script ant

40
user855

Est-ce pour une tâche <exec>?

Vous pouvez définir des variables d'environnement lorsque vous exécutez une tâche <exec>:

<exec executable="${my.command}">
    <env key="foo" value="bar"/>
    <arg line="some value"/>
</exec>

Vous pouvez utiliser <property environment="env"/> pour développer le chemin:

<property environment="env"/>
<exec executable="${my.command}">
   <env key="PATH" value="${env.PATH}:${my.directory}"/>
</exec>

S'il s'agit d'une tâche personnalisée nécessitant une variable d'environnement, mais ne vous autorisant pas à définir la variable d'environnement dans la tâche si aucune n'est définie, vous pouvez essayer de la définir dans:

<property environment="env"/>
<property name="env.foo" value="bar!bar"/>

Cecipourraitdéfinir une variable d'environnement appelée foo à la valeur de bar!bar!. Je me souviens de quelque chose à ce sujet, mais je n'ai pas réussi à le faire fonctionner.

Vous pouvez également faire en sorte qu'un script ant en exécute un autre et que le premier script ant définisse la valeur de l'environnement. Je l'ai fait quand j'ai dû définir ANT_OPT.

62
David W.

Dans fourmi, les propriétés sont immuables, donc la suggestion de David ci-dessus:

<property name="env.foo" value="bar!bar"/>

ne fonctionnera pas.

Mais (avec la bibliothèque antcontrib-library), les variables sont mutables, donc cela fonctionne:

<var name="env.foo" value="bar!bar"/>

NOTE: pour utiliser la bibliothèque antcontrib, téléchargez-le à partir d'ici: ANT Contrib - Download

Cela fait le travail, mais semble être une ruse ignoble.

Donc, à votre question spécifique, essayez:

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <pathelement location="${basedir}/lib/ant-contrib-1.0b3.jar" />
    </classpath>
</taskdef>

<var name="env.PATH" value="some:custom:value"/>
6
Jerry

Vous pouvez utiliser la commande setx pour définir les variables d'environnement.

Pour l'aide de la commande setx, reportez-vous à http://ss64.com/nt/setx.html

<exec executable="setx.exe">
  <arg line="Path C:\jdk1.5.0_12\bin"/>
  <arg line="/m"/>
</exec>
2
Rutwig

J'ai trouvé que cela fonctionne en citant la valeur de variable

<exec executable="setx">
    <arg line="Path &quot;${env.Path};c:\testPath&quot;" />
    <arg line="/m" />
</exec>
1
komelio

Vous pouvez utiliser pour développer le chemin:

Et ensuite, vous pouvez exécuter par exemple sh de ant à export la variable d'environnement:

<property environment="env"/>
<exec executable="sh">
   <arg value="-c"/>
   <arg value="export PATH=${env.Path}:${myPath}"/>
</exec>

Ou exécutez votre commande et définissez env avec value, comme suit:

<property environment="env"/>
<exec executable="${your.command}">
   <env key="PATH" value="${env.PATH}:${your.directory}"/>
</exec>
0
Jens A. Koch

comme je n'ai pas assez de réputation pour commenter les suggestions de <variable ..., mon commentaire en réponse ...: - /

Dans ("newer") ant-contrib (package ANT supplémentaire), la tâche n'est pas appelée <variable ... mais <var ...!

(mais cela n'a pas fonctionné pour moi de toute façon puisque je pense que la manipulation du env.* (créé par la tâche <property environment="env" ... />) propriétés Java/variables n'est pertinente que pour les tâches/processus évaluant ces propriétés Java qui sont pas automatiquement "synchronisé en arrière" avec les variables d'environnement de système d'exploitation)

0
Andreas Dietrich

Pour définir les variables d'environnement via Ant, essayez d'appeler la tâche d'exécution et définissez les valeurs de ligne de commande. Je n'ai pas essayé cela en passant, mais ça devrait marcher.

0
Vicky