私はこの答えを通してantbuild.xmlにPATH環境変数を設定しようとしていました。
cygwinで動作しますが、cmdやPowerShellでは動作しません。
いくつかの情報:
Apache Ant 1.6.5(新しいバージョン(1.8.4)があることは知っていますが、内部的な理由から、この古いバージョンを使用する必要があります)
Powershell v2.0
cmd v6.1.7601
cygwin 2.774
Windows 7
私はこの答えを通してantbuild.xmlにPATH環境変数を設定しようとしていました。
cygwinで動作しますが、cmdやPowerShellでは動作しません。
いくつかの情報:
Apache Ant 1.6.5(新しいバージョン(1.8.4)があることは知っていますが、内部的な理由から、この古いバージョンを使用する必要があります)
Powershell v2.0
cmd v6.1.7601
cygwin 2.774
Windows 7
Windows / cmd環境では、タスクの使用方法がexec
少し異なる場合があります。
set
例としてwindowsコマンドを使用してみましょう。set
環境変数を出力します。コマンドを実行する通常のexec
タスクは次のset
ようになります。
<exec executable="set" outputproperty="set.output">
<env key="MY_VAR" value="MY_VAL"/>
<echo message="${set.output}"/>
</exec>
ただし、この形式のexec
タスクを使用すると、IOExceptionがスローされます。システムは指定されたファイルを見つけることができません。
Windows cmdシェルでantを実行している場合、次のように、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サブプロセスでcmd /c set
実行されているです。set
これが必要な理由は少し複雑であり、コマンドがWin32によって配置される方法によるもの::CreateProcess
です。antexecドキュメントはこれを簡単に説明しています。
PowerShellを使用してこれらのいずれも試したことがないため、どちらかが機能するかどうかの経験がないことに注意してください。
私自身のantビルドスクリプトには、通常、Windowsプラットフォーム用の特別な処理を必要とする各ターゲットの2つのバージョンがあり、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>
残念ながら、1.6.5バージョンに関連するアリのバグでした。1.8.4にアップデートでき、すべて正常に動作します。