Как установить переменную среды path из ant script

#ant #environment-variables

#ant #окружение-переменные

Вопрос:

Как установить переменную среды path из ant script

Ответ №1:

Это для <exec> задачи?

Вы можете установить переменные окружения при запуске <exec> задачи:

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

Вы можете использовать <property environment="env"/> для расширения пути:

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

Если это для какой-либо пользовательской задачи, для которой требуется переменная окружения, но которая не позволяет вам установить переменную окружения в задаче, если она не установлена, вы можете попробовать установить ее в:

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

Это может присвоить переменной окружения, вызываемой foo , значение bar!bar! . Я что-то помню об этом, но не смог заставить это работать.

Еще одна вещь, которую вы можете сделать, это заставить один ant-скрипт выполнить другой и заставить первый ant-скрипт установить значение среды. Я сделал это, когда мне нужно было установить ANT_OPT .

Комментарии:

1. Первое решение сработало для меня. Я использую RHEL 5.4 и должен был установить свой PYTHONPATH в задаче ant exec, которая в этом нуждалась.

2. На моей машине (Win7) это должен был быть env.Path, а не env.PATH.

3. @NateGlenn В Unix и Java (так что, следовательно, и в Ant) имена переменных окружения чувствительны к регистру. PATH отличается от Path и от path . В Windows имена переменных окружения не чувствительны к регистру. Таким образом, Path , path и PATH все одинаковы, но когда вы используете Ant, они представляют три разные переменные. В Unix это всегда будет PATH . В Windows я даже не уверен, что она одинакова от компьютера к компьютеру. Вы можете использовать <echoproperties/> task, чтобы посмотреть, что ваша система делает с переменными окружения.

4. @DavidW. Привет, спасибо! Я искал команду, которая могла бы это сделать.

5. как насчет задачи <java>? документы java task ничего не говорят. Это должно работать на кросс-платформенной платформе. Я пытаюсь установить переменную с именем GAZEBO_MASTER_URI

Ответ №2:

В ant свойства неизменяемы, поэтому предложение Дэвида выше:

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

не будет работать.

Но (с antcontrib-library) переменные изменяемы, так что это работает:

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

ПРИМЕЧАНИЕ: чтобы использовать библиотеку antcontrib, загрузите ее отсюда: ANT Contrib — Загрузить

Это позволяет выполнить работу, но кажется подлым трюком.

Итак, на ваш конкретный вопрос, попробуйте:

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

Комментарии:

1. Это отличный ответ, но обратите внимание, что переменная task не является частью стандартного дистрибутива Ant; вам необходимо установить ant-contrib.

2. Кроме того, это фактически не обновит переменную среды Windows, только свойство ant env.PATH

Ответ №3:

Вы можете использовать команду setx для установки переменных окружения.

Для получения справки по команде setx обратитесь http://ss64.com/nt/setx.html

 <exec executable="setx.exe">
  <arg line="Path C:jdk1.5.0_12bin"/>
  <arg line="/m"/>
</exec>
  

Комментарии:

1. Из документации setx: «2) В локальной системе переменные, созданные или измененные этим инструментом, будут доступны в будущих окнах командной строки, но не в текущем CMD.exe окно командной строки.» Таким образом, это не будет работать как решение вопроса, если только пользователь не захочет открыть новую оболочку.

Ответ №4:

Я обнаружил, что это работает, заключая в кавычки значение переменной

 <exec executable="setx">
    <arg line="Path amp;quot;${env.Path};c:testPathamp;quot;" />
    <arg line="/m" />
</exec>
  

Ответ №5:

Вы можете использовать для расширения пути:

И затем вы можете выполнить, например, sh из ant в export переменную окружения:

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

Или выполните свою команду и установите env с value помощью, вот так:

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

Ответ №6:

Чтобы задать переменные среды через Ant, попробуйте вызвать exec task и задать значения командной строки. Я, кстати, не пробовал это, но это должно сработать.

Ответ №7:

поскольку у меня недостаточно репутации, чтобы прокомментировать <variable ... предложения, мой комментарий в качестве ответа… :-/

В («более новом») ant-contrib (дополнительный пакет ANT) задача не вызывается <variable ... , но <var ... !

(но у меня это все равно не сработало, поскольку я думаю, что манипулирование env.* (созданными <property environment="env" ... /> задачей) свойствами / переменными Java относится только к задачам / процессам, оценивающим эти свойства Java, которые не «синхронизируются» автоматически с переменными окружения ОС)