1

私はこの答えを通して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

4

2 に答える 2

3

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>
于 2012-07-04T21:24:57.103 に答える
0

残念ながら、1.6.5バージョンに関連するアリのバグでした。1.8.4にアップデートでき、すべて正常に動作します。

于 2012-07-05T19:09:57.333 に答える