Antメモ

2002/12/1 作成

Antの使い方

簡単なビルドファイルを作成、実行し、Antの使い方を説明します。

インストール

Jakrta AntのサイトからAntのバイナリをダウンロードし、 適当なディレクトリに展開します。

環境変数を設定します。

Windowsの例

set ANT_HOME=C:\apps\j2sdk1.4.0_01
set JAVA_HOME=C:\apps\jakarta-ant-1.5.1
set PATH=%PATH%;%ANT_HOME%\bin

Hello Ant

簡単なAntのビルドファイルを書いて、実行してみましょう。
"hello ant"と出力するだけのビルドファイルを作成します。
作成するファイル名はbuild.xmlという名前にします。

build.xmlの内容

<project name="helloant" default="hello">
  <target name="hello">
    <echo message="hello ant!"/>
  </target>
</project>

DOSプロンプトを開き、build.xmlを作ったディレクトリに移動し、Antと打ちます。 成功すると以下のようなメッセージが出力されます。

C:\projects\tmp\aaa>ant
Buildfile: build.xml

hello:
     [echo] hello ant!

BUILD SUCCESSFUL
Total time: 1 second

プロジェクトとターゲットとタスク

Antには以下の3つのレベルの構成要素があります。

先のbuild.xmlも3つのレベルの要素から出来ています。
<project name="helloant" default="hello">
<target name="hello">
<echo message="hello ant!"/> タスク
</target>
ターゲット
</project>
プロジェクト

説明
単位 説明
プロジェクト(project) プロジェクト単位
build.xmlのトップレベルの要素で、1つだけ記述します。
default属性でデフォルトのターゲットを指定します。
basedir属性で実行ディレクトリを指定できます。
ターゲット(target) ビルド単位。
複数のタスクの集まりで、1つのプロジェクトに1つ以上記述します。
depend属性で依存ターゲットを指定できます。
タスク(task) 実際の処理単位です。
ターゲットの中に複数記述できます

つまり以下のような記述が可能になります。
<project name="helloant" default="hello" >
<target name="hello">
<echo message="hello ant!"/>
</target>
<target name="hello2">
<echo message="good day1!"/>
<echo message="good day2!"/>
</target>
</project>

実行するantの引数にターゲットを指定することで、 任意のターゲットを実行できます。

C:\projects\tmp\aaa>ant hello2

ありがちなエラー

ビルド失敗にありがちなエラーをいくつか上げます。

XMLのタグを閉じ忘れ(子要素なしのタグ)

<echo message="hello ant!">

<echo message="hello ant!"/>

XMLのタグを閉じ忘れ(対応するタグ閉じタグ)

  <target name="hello">
    <echo message="hello ant!"/>
  <target>

  <target name="hello">
    <echo message="hello ant!"/>
  </target>

日本語文字指定

build.xmlで日本語を記述するときは、 xmlのエンコーディングに日本語文字コードを指定する必要があります (指定しない場合はUTF-8と認識されます)。

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="helloant" default="hello">
  <!--ハローターゲット-->
  <target name="hello">
....

タスクを探す

Antには、タスクが星の数ほど用意されています。 ビルドで、何かの処理を行い時は、タスクを探します。 探す方法としては、以下のような方法があります。

近くに詳しい人がいれば、聞くのが一番早くて確実ですが、 そうでなければ自分で調べるのがよいでしょう。 幸いAntは、ドキュメントがかなりしっかりしてる(と思う)ので、 ドキュメントを見ればたいていのことがわかります。 ここではドキュメントを使ってタスクを探す方法をちょっとだけ説明します。

ドキュメントは、Antをインストールしたディレクトリのdocにドキュメントがあります。
Documentation->AntTasks->Core Tasks(あるいはOptional Tasks)
とリンクを辿れば、多くのタスクのリファレンスを見ることができます (なお、この説明はバージョン1.5.1を元に作成)。

例として、"ファイルをコピーする"タスクを探してみましょう。 コンパイルするタスクは"Copy"です。 左フレームのCopyをクリックすると、説明の画面が表示されます。 タスクのリファレンスページはだいたい以下のような構成になっています。

Copy(タスク名)
...

Description(説明)
...

Parameters(パラメータ)
...

Parameters specified as nested elements(ネストした要素として指定するパラメータ)
...

Example(例)
...

Parameters(パラメータ)はそのタスクの属性に記述できるパラメータです。

Parameters specified as nested elements(ネストした要素として指定するパラメータ)は、 タスクの子要素に(複数)指定するパラメータです。

ドキュメントのCopyタスクの例

  <copy todir="../dest/dir">
    <fileset dir="src_dir">
      <exclude name="**/*.java"/>
    </fileset>
  </copy>

この例で言えば、todirが属性パラメータ filesetがネストした要素のパラメータです。

Example(例)があるのが素敵なところです。 この、例をコピーして、ちょいと修正すれば、 たいていのことは事足ります。

なお、Ja-Jakrta翻訳に Antドキュメントの日本語訳がありますので、英語が苦手な人はコチラを見るとよいでしょう。

プロパティ

プロパティーを使って、値(定数)の定義を行うことができます。

プロパティーの例(name)

<project name="helloant" default="hello">

  <property name="message" value="hello ant!"/>

  <target name="hello">
    <echo message="${message}"/>
  </target>

</project>

Propertyタスクで設定した値を、${プロパティー名}で参照することができます。
通常、クラスパス、ソースパスなどはプロパティーで指定します。

外部のプロパティーファイルからプロパティーを読み込むこともできます。
パスの設定などは、よくbuild.xmlの外部のプロパティーに書きます。

プロパティーの例(file)

build.xml

<project name="helloant" default="hello">

  <property file="hoge.properties"/>

  <target name="hello">
    <echo message="${aaa}"/>
  </target>

</project>

hoge.properties

aaa=bbb

プロパティーを使い、システム環境変数の取得も可能です (property_env.xml)。 また、定義せずに使える組み込みプロパティー(property_buildin.xml)もあります。

なお、プロパティーは一度設定されたあとは不変なので、 変数として使うことはできません。 変数的なことをしたいときはAntCallタスクのparamを使います。

Antの使い方(2)

コンパイル、実行する簡単なビルドファイルを作ってみます。

ここでは、以下の構造でJavaプロジェクトを作ってみます。
src/
|__aaa/
  |__Main.java
classes/
build.xml

コンパイルするぞ

まずはコンパイルするbuild.xmlを書きます。 コンパイルはJavacタスクです。

<project name="helloant" default="compile">

  <target name="compile">
    <javac srcdir="src"
      destdir="classes"/>
  </target>

</project>

コンパイルを実行します。 ソースパスの指定だけで、再帰的にソースを検索してくれます。

C:\projects\tmp\at>ant
Buildfile: build.xml

compile:
    [javac] Compiling 1 source file to C:\projects\tmp\at\classes

BUILD SUCCESSFUL
Total time: 2 seconds

パスは外だしといた方が何かと便利なので(複数のタスクから使うことが多いので)、 プロパティーで定義しときましょう。

<project name="helloant" default="compile">

  <property name="src" value="src"/>
  <property name="classes" value="classes"/>

  <target name="compile">
    <javac srcdir="${src}"
      destdir="${classes}"/>
  </target>

</project>

実行するぞ

実行はJavaタスクです。

<project name="helloant" default="compile">

  <property name="src" value="src"/>
  <property name="classes" value="classes"/>

  <target name="compile">
    <javac srcdir="${src}"
      destdir="${classes}"/>
  </target>

  <target name="run" depends="compile">
    <java classname="aaa.Main"
        classpath="${classes}" >
    </java>
  </target>

</project>

クラスパスを${classes}に通しています(さっそくプロパティー指定が役立ちました)。
depends属性は必須ではないですが、指定しておけば、runタスクを実行する前に、 自動的にcompileタスクを実行してくれます (ソースを編集後、ant runでコンパイル&実行してくれます)

実行します。runターゲットを指定します。

C:\projects\tmp\at>ant run
Buildfile: build.xml

compile:

run:
     [java] hello!

BUILD SUCCESSFUL
Total time: 1 second

次へ


もどる