OS依存のコマンド(ファイル)を実行するコアタスク。
(org.apache.tools.ant.taskdefs.Exec extends Task)
| 属性 | 説明 | 更新日 |
|---|---|---|
| executable | 実行するコマンド(引数を含まない) | |
| dir | コマンドを実行するディレクトリー。(実行時のカレントディレクトリー。Javaのuser.dir) | |
| spawn | trueにすると、別プロセスで実行する。デフォルトはfalse | |
| outputproperty | 標準出力の内容を、ここで指定されたプロパティーに設定する。 | 2010-02-28 |
| タグ | 説明 | 備考 | 更新日 |
|---|---|---|---|
| <arg value="引数1つ" /> | コマンドの引数を1つ指定する。 | ||
| <arg line="引数複数" /> | コマンドの引数を複数指定する。 | スペース区切り | |
| <env key="環境変数名" value="値"> | 環境変数を指定する。 | →JBossでJAVA_OPTSを指定する例 | 2008-11-08 |
JBossのrun.batを実行する例。
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="jboss" basedir=".." default="run">
<property name="jboss.home" location="C:/jboss/jboss-4.2.3.GA" />
<target name="run">
<exec executable="${jboss.home}/bin/run.bat" />
</target>
</project>
Eclipseのantで実行すると、Eclipseのコンソール上にメッセージ類が表示される。
そのコンソール上のコマンドが終了するまで、ant実行自体も終了しない。
spawn属性をtrueにして別プロセスにしてみると、ant実行はすぐ終了するが、どこにもコンソールが表示されない(Eclipseのコンソール上にも表示されない…)。
<target name="run">
<exec executable="${jboss.home}/bin/run.bat" spawn="true" />
</target>
WindowsXPでバッチファイルを別プロセスで実行するには、startコマンドを利用できる。ただしstartは内部コマンドなので、execタスクから直接実行する事は出来ない。cmd.exeを介してやる必要がある。
また、(ついでに)run.batに引数「-c default」を指定してみた。
<target name="run">
<exec executable="cmd" spawn="true">
<arg value="/c" />
<arg value="start" />
<arg line="${jboss.home}/bin/run.bat -c default" />
</exec>
</target>
Cygwinのコマンドを実行する例。[2010-02-21]
実体がexeファイルのものは、そのまま実行することが出来る。
シェルスクリプトの場合は、/bin/bash.exeを経由して実行する。その際、環境変数等が必要であれば、--loginオプションを付ける。
| build.xml | 実行結果の例 | |
|---|---|---|
<property name="cygwin" location="C:\cygwin" /> |
||
| exe |
<target name="execute pwd"> <exec executable="${cygwin}/bin/pwd.exe" /> </target>
|
execute pwd:
[exec] /cygdrive/c/workspace/sample/bin
|
<target name="execute ls"> <exec executable="${cygwin}/bin/ls.exe"> <arg value="-l" /> <arg value="/usr/local" /> </exec> </target> |
execute ls:
[exec] total 2
[exec] drwxrwx---+ 1 hishidama Users 0 2008-10-17 00:34 bin
[exec] drwxrwx---+ 1 hishidama Users 0 2008-10-17 00:34 etc
[exec] drwxrwx---+ 1 hishidama Users 0 2008-10-17 00:34 lib
|
|
<target name="execute ls2"> <exec executable="${cygwin}/bin/ls.exe" dir="${cygwin}/usr/local"> <arg value="-l" /> </exec> </target> |
execute ls2:
[exec] total 2
[exec] drwxrwx---+ 1 hishidama Users 0 2008-10-17 00:34 bin
[exec] drwxrwx---+ 1 hishidama Users 0 2008-10-17 00:34 etc
[exec] drwxrwx---+ 1 hishidama Users 0 2008-10-17 00:34 lib
|
|
<target name="cygpath"> [2010-02-28] <exec executable="${cygwin}/bin/cygpath.exe" outputproperty="zzz"> <arg value="-u" /> <arg value="C:\temp" /> </exec> <echo message="${zzz}" /> </target> |
cygpath:
[echo] /cygdrive/c/temp
|
|
| sh |
<target name="execute test.sh"> <exec executable="${cygwin}/bin/bash.exe"> <arg value="/tmp/test.sh" /> <arg value="abc" /> </exec> </target>/tmp/test.sh: #!/bin/bash echo zzzz $1 |
execute test.sh:
[exec] zzzz abc
|
<target name="execute user.sh"> <exec executable="${cygwin}/bin/bash.exe"> <arg value="/tmp/user.sh" /> </exec> </target> /tmp/user.sh: #!/bin/bash echo aaa $USER zzz |
execute user.sh:
[exec] aaa zzz
|
|
<target name="execute user.sh login"> <exec executable="${cygwin}/bin/bash.exe"> <arg value="--login" /> <arg value="/tmp/user.sh" /> </exec> </target> |
execute user.sh login:
[exec] aaa hishidama zzz
|