#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, которые не «синхронизируются» автоматически с переменными окружения ОС)