apply
説明
システムコマンドを実行します。
複数のファイルを同時に処理できないコマンドとかに有効です。
細かい指定ができます。
Execタスクとの最大の違いはFileSetを使って、該当するファイルごとに
コマンドを実行する所です。
Unixをお使いでしたら、find -exec 以上のことができるといったらわかりやすいでしょう。
属性
addsourcefile
[デフォルトの値はtrue]
srcfile要素を省略した場合、最後の引数としてsourcefileが追加されます。
省略するためにfalseにして場合、もしsrcfile要素を含んでいる場合エラーになります。
append
ファイル出力時に追記形式にするかどうかです。
デフォルトはfalse
追記形式にしないと最後の実行結果しか出力されません。
outputpropertyには影響ありません。
command[Deprecated]
executable属性を使うべきです。
dest
[mapper要素を含む場合のみ必須(mapperとdestはペアーで用いられないとならない)]
destにはディレクトリーパスを入力します。このパスは、targetfile出力時のベースディレクトリーになります。
またtargetfile含む場合もdestがないとエラーが出ます。
dir
コマンドが実行時、ベースとなるディレクトリーです。
例えば、batファイルの実行時、指定したDirectoryより実行されます。
\や/を含んだ、相対パスだと実行できないケースもありました。コマンドはパスを通すか、
あるいは絶対パス、または同階層から実行した方がいいのではないでしょうか。
error
エラーを出力するファイルを指定します。
errorproperty
エラー出力をプロパティーに設定します。
Ant1.6からの機能です。
executable
[必須項目]
実行するコマンドです。引数はここでは記述しません。
引数はarg要素で追加します。
failifexecutionfails
コマンドがない等でコマンドの実行が失敗した場合、
failonerror
コマンドの実行時に、コマンドの返り値が、0以外の時に、Antのビルドを中止するかどうかです。
デフォルトではfalseで中止しません。
forwardslash
[true/false] デフォルトはfalse
スラッシュには2つありまして、"\"のBack Slashと、通常スラッシュとしか呼ばない "/"のForward Slashがあります。
この属性をtrueとすると、引数として渡すパスを/で区切ります。Windowsの場合 "\"で区切ったパスでわたります。
ただし、Windowsの場合、"/"でパスを記述する場合、絶対パスは"/c:/"という風にはじめた方がいいのですが、
ここでは"c:/"となりますので、注意が必要です。
Unix系OSはもともと/でパスを区切りますので関係がありません。
input
ここで指定したファイルの中身を標準を実行するコマンドの標準入力へ出力します。
Unixでいうと
cat file | command
inputstring
ここで指定した文字列を実行するコマンドの標準入力へ出力します。
logerror
これはエラー出力を、Antログに出力(表示)する、または、エラーログを、output属性で指定した、ファイルやoutputpropertyへ出力するかどうかを決めます。
ただし、error属性やerrorproperty属性を指定している場合効果はありません。(そちらに出力される)
Ant1.6からの機能です。
maxparallel
parallel属性がtrueの時のみ有効、
parallel時に、渡すsourcefileの数を制限します。
デフォルトでは無制限です。
引数の数に制限がある場合に使えるでしょう。
0以下の数値を指定した場合、は無制限となります。
1を指定した場合、parallel属性をfalseにしたのと同じ動作をするでしょう。
newenvironment
[true/false] デフォルトはfalse
newenvironment属性がtrueの場合、applyタスクがenv要素を含む場合、
コマンドに渡す環境変数は新しくenv要素で指定した値のみになります。
含まない場合は、属性値が、falseでも動作は変わりません。
属性がfalseの場合は、元となる環境変数と、env要素で指定した環境変数となります。
なお、newenvironment属性値に関係なく、環境変数はenv要素中で、上書きできます。
os
コマンドを実行するOSを指定します。
ここに記述されていないOS上ではコマンドを実行しません。
ここで指定するOSの値は プロパティー${os.name}です。(完全に一致しないと実行されません。)
複数記述する場合は、,や;で区切ります。
output
出力結果をファイルに保存します。
ただしparallel属性がtrue・つまりコマンドは1回しか実行しないというケースを除いて、
そのままでは、最後に実行したコマンドの結果しか保存されません。
そのため、append属性をtrueにする必要があります。しかし、そうすると今度は、前回の結果の後に追記してしまいます。
これを回避するには、output属性に設定するファイルをdeleteタスクで消す必要があります。
すなわち、outputを使うときには注意が必要です。
outputproperty
出力結果をプロパティーに設定します。
エラー出力を分けていない限り、ここにエラー出力も入ります。
ただし、変数は、1度値が入ると、変わらないので、最初の実行結果しか入りません。
すべての出力結果がpropertyに必要ならば、output属性でファイルに書き出した後に、loadPropertyタスクで読み込むといいでしょう。
append属性はoutputpropertyには効果ありません。
parallel
デフォルトの値はfalseです。
この属性がtrueの時は、コマンドは1度だけ実行されます。引数には、デフォルトではすべてのファイルが続きます。
(数を制限するにはmaxparallel属性に最大値を指定します。)
falseの場合は、コマンドは、各ファイルごとに1回実行されます。
relative
コマンドラインに渡すファイルのパスを絶対パス(c:\とかで始まる)で渡すかfileset/dirset/filelistやdest属性の値(targetfileの場合)からの相対パスで渡すかどうかです。
デフォルトの値はfalse(絶対パスで渡します。)
resolveexecutable
[true/false] デフォルトはfalse
この属性をtrueにすると実行時のコマンドをAntビルドファイルのbaseディレクトリー、dir属性で指定されたパスの順に探しにいきます。
つまり、dir属性を指定した場合、trueすれば、dir属性値からの相対パスでexecutable属性値を指定できます。
resultproperty
コマンドの実行完了コードを指定した、プロパティーに設定します。
実行完了コードは正常に終了した場合0が入ります。
Javaでも終了時、System.exit(0)という風にします。
ただし、parallel属性がfalseの場合、最初のコマンドの実行結果しか入りませんので、使い方に注意が必要です。
skipemptyfilesets
この属性がtrueの場合、以下の条件のときに、コマンドを実行しません。
[1] filesetに、該当するsourcefileが一つもない。(parallel属性がfalseの場合は、コマンドは実行されません)
[2] sourcefileと対になるtargetfileよりも、sourcefileが古い場合
属性名がfilesetsとなっていますが、filelistに関しても同様です。
更新されていないファイルはコンパイルしないとかで使います。
spawn
デフォルトはfalseです。
spawn属性をtrueにすると出力はantのログに記録されません。
timeout
コマンドを実行時、終了するまで待つ時間です。
これ以上の時間がコマンド実行時にかかるとエラーになります。
時間は、millisecondで指定します。
type
fileかfolderあるいはbothの3つのうちいずれかを記述します。
デフォルトではfileとなっています。
fileの場合は、該当するfileのみコマンドで実行されます。
folderの場合は、該当するfolderのみコマンドで実行されます。
bothの場合は両方実行されます。
verbose
実行結果の概要を表示するかどうかです。
デフォルトではfalseとなっています。
出力例
[apply] Applied c:\tmp\ant\echo.bat to 3 files and 0 directories.
vmlauncher
[true/false] デフォルトはtrue
コマンドを実行する場合、Javaから実行するか、OS上のShellから実行するかです。
MS-DOSコマンドの場合、この属性をfalseにしなければ動作しない場合があります。
含む
含まれる
サンプル
tmpフォルダー中のファイル
tmp/a.txt tmp/b.txt tmp/c.dat echo.batの中身 一つ目の引数・二つ目の引数・3つ目の引数・環境変数BASEを出力します。 echo %1 %2 %3 %BASE%
単純な例
<project default="apply"> <target name="apply"> <apply executable="c:\tmp\ant\echo.bat" > <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] [apply] C:\tmp\ant>echo C:\tmp\ant\a.txt [apply] C:\tmp\ant\a.txt [apply] [apply] C:\tmp\ant>echo C:\tmp\ant\b.txt [apply] C:\tmp\ant\b.txt BUILD SUCCESSFUL Total time: 265 milliseconds
引数を使用した例
デフォルトでは引数の後に、srcfile(該当するファイル)が続きます。
<project default="apply"> <target name="apply"> <apply executable="c:\tmp\ant\echo.bat" > <arg value="-x"/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] [apply] C:\tmp\ant>echo -x C:\tmp\ant\a.txt [apply] -x C:\tmp\ant\a.txt [apply] [apply] C:\tmp\ant>echo -x C:\tmp\ant\b.txt [apply] -x C:\tmp\ant\b.txt BUILD SUCCESSFUL Total time: 250 milliseconds
srcfileの引数の順番を変更する場合
<project default="apply"> <target name="apply"> <apply executable="c:\tmp\ant\echo.bat" > <srcfile/> <arg value="-x"/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] [apply] C:\tmp\ant>echo C:\tmp\ant\a.txt -x [apply] C:\tmp\ant\a.txt -x [apply] [apply] C:\tmp\ant>echo C:\tmp\ant\b.txt -x [apply] C:\tmp\ant\b.txt -x BUILD SUCCESSFUL Total time: 250 milliseconds
環境変数の使用例
<project default="apply"> <target name="apply"> <apply executable="c:\tmp\ant\echo.bat" > <srcfile/> <env key="BASE" value="${basedir}"/> <arg value="-x"/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] [apply] C:\tmp\ant>echo C:\tmp\ant\a.txt -x c:\tmp\ant [apply] C:\tmp\ant\a.txt -x c:\tmp\ant [apply] [apply] C:\tmp\ant>echo C:\tmp\ant\b.txt -x c:\tmp\ant [apply] C:\tmp\ant\b.txt -x c:\tmp\ant BUILD SUCCESSFUL Total time: 328 milliseconds
dirsetとfilelist
1.6以降使用できます。
<project default="apply"> <target name="apply"> <apply executable="c:\tmp\ant\echo.bat" > <srcfile/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> <filelist dir="c:\tmp\ant" files="c.dat"/> <dirset dir="c:\tmp\ant\" includes="*"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] C:\tmp\ant>echo C:\tmp\ant\a.txt [apply] C:\tmp\ant\a.txt C:\java\ant [apply] C:\tmp\ant>echo C:\tmp\ant\b.txt [apply] C:\tmp\ant\b.txt C:\java\ant [apply] C:\tmp\ant>echo C:\tmp\ant\dir [apply] C:\tmp\ant\dir C:\java\ant [apply] C:\tmp\ant>echo C:\tmp\ant\c.dat [apply] C:\tmp\ant\c.dat C:\java\ant BUILD SUCCESSFUL
Mapperの正しい使用例
targetfileの場所を決める必要がある。
<project default="apply"> <target name="apply"> <apply dest="c:\" executable="c:\tmp\ant\echo.bat" > <targetfile/> <srcfile/> <mapper type="glob" from="*.txt" to="*.doc"/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] C:\tmp\ant>echo C:\a.doc C:\tmp\ant\a.txt [apply] C:\a.doc C:\tmp\ant\a.txt [apply] C:\tmp\ant>echo C:\b.doc C:\tmp\ant\b.txt [apply] C:\b.doc C:\tmp\ant\b.txt BUILD SUCCESSFUL Total time: 1 second
Mapperの間違った使い方
targetfile要素を入れないと引数として追加されない。
<project default="apply"> <target name="apply"> <apply dest="c:\" executable="c:\tmp\ant\echo.bat" > <mapper type="glob" from="*.txt" to="*.doc"/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] C:\tmp\ant>echo C:\tmp\ant\a.txt [apply] C:\tmp\ant\a.txt [apply] C:\tmp\ant>echo C:\tmp\ant\b.txt [apply] C:\tmp\ant\b.txt BUILD SUCCESSFUL Total time: 1 second
sourcefileを省略する
srcfile要素を省略した場合も、は属性 addsourcefileをfalseにしなければ最後の引数として追加されます。
<project default="apply"> <target name="apply"> <apply dest="c:\" executable="c:\tmp\ant\echo.bat" addsourcefile="false"> <targetfile/> <mapper type="glob" from="*.txt" to="*.doc"/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] C:\tmp\ant>echo C:\a.doc [apply] C:\a.doc [apply] C:\tmp\ant>echo C:\b.doc [apply] C:\b.doc BUILD SUCCESSFUL Total time: 1 second
filelistの動作
通常は、mapperに該当しないとコマンドそのものが、実行されないが、filelistの場合、srcにだけファイルをセットして実行します。
<project default="apply"> <target name="apply"> <apply dest="c:\" executable="c:\tmp\ant\echo.bat" > <targetfile/> <mapper type="glob" from="*.doc" to="*.txt"/> <fileset dir="c:\tmp\ant\" includes="*.txt"/> <filelist dir="c:\tmp\ant" files="c.dat"/> <dirset dir="c:\tmp\ant\" includes="*"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] C:\tmp\ant>echo C:\tmp\ant\c.dat [apply] C:\tmp\ant\c.dat BUILD SUCCESSFUL Total time: 1 second
parallel
コマンドを1度しか実行しないかどうか?
デフォルトはfalseです。
<project default="apply"> <target name="apply"> <apply executable="c:\tmp\ant\echo.bat" parallel="true"> <fileset dir="c:\tmp\ant\" includes="*.txt"/> </apply> </target> </project>
出力結果
Buildfile: c:\tmp\ant\build.xml apply: [apply] C:\tmp\ant>echo C:\tmp\ant\a.txt C:\tmp\ant\b.txt [apply] C:\tmp\ant\a.txt C:\tmp\ant\b.txt BUILD SUCCESSFUL Total time: 1 second
出力結果
出力結果
出力結果
出力結果