Возможно, вам придется использовать задачу exec
немного по-другому в средах Windows/cmd.
Давайте использовать команду Windows set
в качестве примера. set
будет печатать переменные среды. Обычная задача exec
, выполняющая команду set
, может выглядеть так:
<exec executable="set" outputproperty="set.output">
<env key="MY_VAR" value="MY_VAL"/>
<echo message="${set.output}"/>
</exec>
Но использование этой формы задачи exec
должно вызвать исключение IOException: Система не может найти указанный файл.
При запуске ant в командной оболочке Windows задача exec
также может быть вызвана через cmd
, например:
<exec executable="cmd" outputproperty="set.output">
<arg line="/c set"/>
<env key="MY_VAR" value="MY_VAL"/>
<echo message="${set.output}"/>
</exec>
Это эквивалентная команда; фактическая выполняемая команда - cmd /c set
, которая выполняется set
в подпроцессе cmd.
Причина, по которой это необходимо, лишь немного сложна и связана со способом расположения команд в Win32 ::CreateProcess
. Это кратко поясняется в документах по ant exec.
Обратите внимание, что я не пробовал ни один из них с помощью PowerShell, поэтому у меня нет опыта, который, если и один, то будет работать.
В моих собственных сценариях сборки ant у меня обычно есть две версии каждой цели, которые требуют специальной обработки для платформ Windows, с тестом isWindows
, который выглядит следующим образом:
<target name="check-windows">
<condition property="isWindows">
<os family="windows"/>
</condition>
</target>
Затем я могу переключаться между версиями одной и той же задачи, используя:
<target name="my-target-notwindows" depends="check-windows" unless="isWindows>
...
</target>
<target name="my-target-windows" depends="check-windows" if="isWindows>
...
</target>
<target name="my-target" depends="my-target-notwindows,my-target-windows">
...
</target>
person
pb2q
schedule
04.07.2012
exec
? - person pb2q   schedule 05.07.2012