2010年1月8日金曜日

ANTでif文とfor文を使用。

ANTで拡張タスク「<if>」、「<for>」を使ってみる。

必要なライブラリは「ant-contrib」。
今回試してみたバージョンは「1.0b3」
ant-contrib サイトで「ant-contrib-1.0b3」をダウンロードする。

まず、「<if>」のテスト結果。
$ ant -buildfile if_test.xml
Buildfile: if_test.xml

main:
[echo] called target main
[echo] hello babukuma!
[echo] abcd else...

BUILD SUCCESSFUL
Total time: 0 seconds


ソース(if_test.xml)は
<?xml version="1.0" encoding="UTF-8"?>
<project default="main" basedir=".">
<!--<taskdef resource="net/sf/antcontrib/antlib.xml" />-->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>

<!-- - - - - - - - - - - - - - - - - -
target: main
- - - - - - - - - - - - - - - - - -->
<target name="main">
<echo message="called target main" />
<property name="babu" value="kuma" />

<if>
<isset property="babu" />
<then>
<echo message="hello babukuma!" />
</then>
<else>
<echo message="babukuma else..." />
</else>
</if>

<if>
<isset property="abcd" />
<then>
<echo message="hello abcd!" />
</then>
<else>
<echo message="abcd else..." />
</else>
</if>
</target>
</project>


「<for>」のテスト結果。
$ ant -buildfile for_test.xml
Buildfile: for_test.xml

main:
[echo] called target main

test:
[echo] MSG:1

test:
[echo] MSG:2

test:
[echo] MSG:3

test:
[echo] MSG:4

BUILD SUCCESSFUL
Total time: 0 seconds


ソース(for_test.xml)は
<?xml version="1.0" encoding="UTF-8"?>
<project default="main" basedir=".">
<!--<taskdef resource="net/sf/antcontrib/antlib.xml" />-->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>

<!-- - - - - - - - - - - - - - - - - -
target: main
- - - - - - - - - - - - - - - - - -->
<target name="main">
<echo message="called target main" />
<property name="msg.array" value="1,2,3,4" />

<for param="msg" list="${msg.array}">
<sequential>
<var name="msg" unset="true" />
<property name="msg" value="@{msg}" />
<antcall target="test" />
</sequential>
</for>
</target>

<!-- - - - - - - - - - - - - - - - - -
target: test
- - - - - - - - - - - - - - - - - -->
<target name="test">
<echo>MSG:${msg}</echo>
</target>
</project>


使ってみると結構便利だと俺は勝手に思った。(hiro_nemuさんには他のスクリプトでいいんじゃってつこまれたけど。)