システムコマンドを実行します。os属性が指定されている場合、コマンドは指定されたオペレーティングシステムのいずれかでApache Antが実行された場合にのみ実行されます。
フォークされたプログラムと対話することはできません。入力データを送信する唯一の方法は、input属性とinputstring属性を使用することです。また、Ant 1.6以降、フォークされたプログラムで入力を読み込もうとすると、EOF(-1
)が返されることに注意してください。これは、Ant 1.5ではそのような試行がブロックされていたこととは異なります。
プロジェクトのbasedirを基準とした相対パスを使用して実行可能ファイルを実行する場合は、一部のオペレーティングシステムでvmlauncher=false
を使用する必要がある場合があります。しかし、これでも失敗する可能性があります(Solaris 8/9が問題として報告されています)。resolveexecutable属性の方が信頼性が高く、次のような方法も有効です。
<property name="executable-full-path"
location="../relative/path/to/executable"/>
<exec executable="${executable-full-path}" ...
<exec>タスクはRuntime.execに委譲し、さらに::CreateProcessを呼び出します。このWin32関数が、呼び出しの正確なセマンティクスを定義します。特に、実行可能ファイルにファイル拡張子を付けない場合、.EXEファイルのみが検索され、.COM、.CMD、または環境変数PATHEXTにリストされている他のファイルタイプは検索されません。これはシェルによってのみ使用されます。
.batファイルは、一般的に直接実行できません。通常は、/cスイッチを使用してコマンドシェル実行可能ファイルcmdを実行する必要があります。
<target name="help">
<exec executable="cmd">
<arg value="/c"/>
<arg value="ant.bat"/>
<arg value="-p"/>
</exec>
</target>
よくある問題は、実行可能ファイルがPATHにないことです。エラーメッセージCannot run program "...":CreateProcess error=2. The system cannot find the path specified.が表示された場合は、PATH変数を確認してください。コマンドラインで直接コマンドを入力してください。Windowsがコマンドを見つければ、Antでも実行できるはずです。(そうでない場合は、ユーザーメーリングリストでヘルプを依頼してください。)Windowsがプログラムを実行できない場合は、プログラムのディレクトリをPATHに追加するか(set PATH=%PATH%;dirOfProgram)、ビルドファイルのexecutable属性に絶対パスを指定してください。
<exec>タスクは、executableパラメータに/bin/sh
などのパスを認識しません。これは、Antが実行されているJVMが標準のWindows実行可能ファイルであり、Cygwin環境を認識していないためです(つまり、cygwin1.dllを読み込みません)。これに対する唯一の回避策は、CygwinでJVMをコンパイルすることです(自己責任で)。たとえば、OpenJDKのCygwin向けビルド手順を参照してください。
executableと<arg>要素を使用して指定されたコマンドは、一時的なDCLスクリプト内で指定されたとおりに実行されます。これにはいくつかの意味があります。
@記号を前に付けることを忘れないでください(例:executable=
@[FOO]BAR.COM)。
HPが提供するJVMは、OpenVMSの終了コードの規則に従っていません。このタスクでJVMを実行する場合、タスクは誤ってエラーが発生したと主張したり(またはエラーを黙って無視したり)する可能性があります。JAVA.EXEを実行するためにこのタスクを使用しないでください。fork属性をtrue
に設定した<java>タスクを使用してください。このタスクは、JVMによる終了コードの解釈に従います。
linux-390で報告されているように、Ant Execタスクを介して呼び出されるシェルスクリプトには、インタープリターを指定する必要があります。つまり、スクリプトは次のようなもので始める必要があります。
#!/bin/bash
そうでないと、タスクは次のように失敗します。
[exec] Warning: UNIXProcess.forkAndExec native error: Exec format error [exec] Result: 255
Antをバックグラウンドプロセスとして実行する場合(ant &など)、spawnをfalse
に設定して<exec>タスクを使用する場合は、フォークされたプロセスに明示的な入力を提供する必要があります。そうでなければ、Antは標準入力から読み込もうとするため、中断されます。
| 属性 | 説明 | 必須 |
|---|---|---|
| command | すべてのコマンドライン引数を含む実行するコマンド。非推奨、代わりにexecutableとネストされた<arg>要素を使用してください。 |
2つのうちいずれか1つのみ |
| executable | コマンドライン引数を含まない実行するコマンド。 | |
| dir | コマンドを実行するディレクトリ。 | いいえ。vmlauncherがtrueの場合、現在の作業ディレクトリがデフォルトになります。それ以外の場合は、プロジェクトのbasedir。 |
| os | コマンドを実行できるオペレーティングシステムのリスト。現在のOSの名前がこのリストに含まれている場合、コマンドが実行されます。OSの名前はJVMによって決定され、os.nameシステムプロパティに設定されます。 |
いいえ |
| osfamily | <os>条件で使用されるOSファミリ。Ant 1.7以降 |
いいえ |
| spawn | コマンドを生成するかどうか。 コマンドを生成すると、その出力はAntによってログに記録されません。 input、output、error、resultのプロパティ設定は、プロセスを生成するとアクティブになりません。 Ant 1.6以降 |
いいえ。デフォルトはfalse |
| output | 出力を書き込むファイルの名前。エラーストリームもファイルまたはプロパティにリダイレクトされない場合、この出力に表示されます。 | いいえ |
| error | コマンドの標準エラーをリダイレクトするファイル。Ant 1.6以降 | いいえ |
| logError | この属性は、エラー出力をAntのログに表示したい場合、かつ出力をファイル/プロパティにリダイレクトする場合に使用します。エラー出力は、出力ファイル/プロパティに含まれません。errorまたはerrorProperty属性でエラーをリダイレクトする場合、これは効果がありません。Ant 1.6以降 | いいえ |
| append | 出力ファイルとエラーファイルを追記するか上書きするか。 | いいえ。デフォルトはfalse |
| outputproperty | コマンドの出力を格納するプロパティの名前。エラーストリームが別のファイルまたはストリームにリダイレクトされない限り、このプロパティにはエラー出力が含まれます。 | いいえ |
| errorproperty | コマンドの標準エラーを格納するプロパティの名前。Ant 1.6以降 | いいえ |
| input | 実行されたコマンドの標準入力から取得されるファイル。この属性はinputstring属性と相互排他的です。Ant 1.6以降 | いいえ |
| inputstring | 実行されたコマンドの入力ストリームとして機能する文字列。この属性はinput属性と相互排他的です。Ant 1.6以降 | いいえ |
| resultproperty | コマンドの戻りコードを格納するプロパティの名前。failonerror=falseの場合にのみ重要です。 |
いいえ |
| timeout | 指定された時間(ミリ秒単位)内に終了しない場合、コマンドを停止します。 | いいえ |
| failonerror | 失敗を示す戻りコードでコマンドが終了した場合、ビルドプロセスを停止します。 | いいえ。デフォルトはfalse |
| failifexecutionfails | プログラムを開始できない場合、ビルドを停止します。 | いいえ。デフォルトはtrue |
| newenvironment | 新しい環境変数が指定されている場合、古い環境を伝播しません。 | いいえ。デフォルトはfalse |
| vmlauncher | 可能な場合は、JVMの実行機能を使用してコマンドを実行します。falseに設定されている場合、基になるOSのシェル(直接、またはantRunスクリプトを介して)が使用されます。一部のオペレーティングシステムでは、これにより、JVMでは通常利用できない機能にアクセスできます。Windowsでは、インタープリターではなくスクリプトを実行できます。dir属性で指定されたディレクトリに対する相対パスとして実行可能ファイルの名前を指定する場合は、vmlauncherも falseに設定する必要がある場合があります。 |
いいえ。デフォルトはtrue |
| resolveexecutable | この属性がtrueの場合、実行可能ファイルの名前はまずプロジェクトのbasedirに対して解決され、それが存在しない場合は、指定されている場合は実行ディレクトリに対して解決されます。Unixシステムでは、ユーザーのパスにあるコマンドのみを実行する場合は、これを falseに設定します。Ant 1.6以降 |
いいえ。デフォルトはfalse |
| searchpath | この属性がtrueの場合、実行可能ファイルの場所を解決する際に、システムパスの環境変数が検索されます。Ant 1.6.3以降 |
いいえ。デフォルトはfalse |
| discardOutput | 出力を完全に破棄するかどうか。この設定は、出力をファイルまたはプロパティにリダイレクトする設定とは互換性がありません。 これを trueに設定すると、出力をファイル、プロパティにリダイレクトするか logErrorを有効にしない限り、エラー出力も破棄されます。Ant 1.10.10以降 |
いいえ。デフォルトはfalse |
| discardError | エラー出力を完全に破棄するかどうか。この設定は、エラー出力をファイルまたはプロパティにリダイレクトする設定、およびlogErrorとは互換性がありません。Ant 1.10.10以降 |
いいえ。デフォルトはfalse |
<exec dir="${src}" executable="cmd.exe" os="Windows 2000" output="dir.txt">
<arg line="/c dir"/>
</exec>
コマンドライン引数は、ネストされた<arg>要素として指定する必要があります。コマンドライン引数を参照してください。
ネストされた<env>要素を使用して、システムコマンドに渡す環境変数を指定できます。
| 属性 | 説明 | 必須 |
|---|---|---|
| key | 環境変数の名前。 注記:Ant 1.7以降、Windowsの場合、名前の大文字と小文字は区別されません。 |
はい |
| value | 環境変数のリテラル値。 | これらのうちいずれか1つのみ |
| path | PATHのような環境変数の値。パスセパレータとして;または :を使用でき、Antはそれをプラットフォームのローカル慣例に変換します。 |
|
| file | 環境変数の値。Antによってファイルの絶対ファイル名に置き換えられます。 |
ネストされたI/Oリダイレクターを指定できます。一般的に、リダイレクターの属性は、タスクレベルで利用可能な対応する属性と同じように動作します。最も注目すべき特殊性は、後方互換性のために<exec>属性を保持することです。ファイルのマッピングはnullソースファイルを使用して行われます。そのため、すべてのMapperタイプが結果を返すわけではありません。結果が返されない場合、リダイレクトの仕様はタスクレベルの属性に戻ります。実際には、入力、出力、エラー出力ファイルのデフォルトを指定できることを意味します。
デフォルトでは、<exec>の戻りコードは無視されます。failonerrorをtrue
に設定すると、失敗を示す戻りコード(OS固有)によってビルドが失敗します。または、resultpropertyをプロパティの名前に設定し、結果コードを割り当てることができます(不変性を除いて)。
プログラムの起動を試行した際にOS依存のエラーコードで失敗した場合、failifexecutionfailsがfalse
に設定されていない限り、<exec>はビルドを停止します。これは、プログラムが存在する場合は実行しますが、存在しない場合は何も実行しない場合に使用できます。
これらのエラーコードの意味は何ですか?それらはOS依存です。Windowsボックスでは、ドキュメントを参照する必要があります。error=2は「そのようなプログラムはありません」を意味し、通常はパスにないことを意味します。Antタスクからそのようなエラーが表示された場合は、通常、Antのバグではなく、マシンの構成の問題です。
X Windowシステムのディスプレイ1でemacsを起動します。
<exec executable="emacs"> <env key="DISPLAY" value=":1.0"/> </exec>
システムコマンドのPATHに${basedir}/binを追加します。
<property environment="env"/>
<exec ... >
<env key="PATH" path="${env.PATH}:${basedir}/bin"/>
</exec>
指定された${file}を使用して${browser}を起動し、Antプロセスを終了します。ブラウザは残ります。
<property name="browser" location="C:/Program Files/Internet Explorer/iexplore.exe"/>
<property name="file" location="ant/docs/manual/index.html"/>
<exec executable="${browser}" spawn="true">
<arg value="${file}"/>
</exec>
blah before blah
という文字列をcat実行可能ファイルに送信します。<inputfilterchain>を使用して、入力時にbefore
をafter
に置き換えます。出力はredirector.outファイルに送信され、同じ名前のプロパティに格納されます。同様に、エラー出力はファイルとプロパティの両方に送信され、どちらもredirector.errという名前になります。
<exec executable="cat">
<redirector outputproperty="redirector.out"
errorproperty="redirector.err"
inputstring="blah before blah">
<inputfilterchain>
<replacestring from="before" to="after"/>
</inputfilterchain>
<outputmapper type="merge" to="redirector.out"/>
<errormapper type="merge" to="redirector.err"/>
</redirector>
</exec>
注記: 引数を単純なarg要素で指定し、スペースで区切ろうとしないでください。これにより、文字列全体を含む単一の引数のみが作成されます。
タイムアウト: タイムアウトが指定されている場合、タイムアウトに達するとサブプロセスがキルされ、ログにメッセージが出力されます。実行の戻り値は-1
となり、failonerror=true
の場合、ビルドが停止しますが、それ以外の場合は無視されます。