アキはフリーランスのプログラマーです >> Java >> Ant >> 索引

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース

apply

■公式Manual

Core Task

説明

システムコマンドを実行します。

複数のファイルを同時に処理できないコマンドとかに有効です。

細かい指定ができます。

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にしなければ動作しない場合があります。

含む

arg

dirset

env

filelist

fileset

mapper

srcfile

targetfile

含まれる

サンプル

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

出力結果


出力結果


出力結果


出力結果





このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース