Ant入門

  1. Antのインストール
  2. 環境設定
  3. Antの実行
  4. ビルドファイル
  5. project要素
  6. property要素
  7. target要素
  8. arg要素
  9. パス類似構造(Path要素、Classpath要素)
  10. Pathelement要素
  11. タスク
    1. antcall
    2. signjar
    3. javac
    4. copy
    5. echo
    6. exec
    7. jar
    8. java
    9. javac
    10. javadoc
    11. junit
    12. native2ascii
    13. condition
    14. isset
    15. os
    16. checkstyle

Apache AntJavaベースのビルドツールである。ビルドツールとは、ソフトウェア構築の際に一連のビルド処理を自動化するためのツールである。代表的なビルドツールとして、makeがある。プラットフォームに依存する形式でビルドルールを記述するmakeに対して、Antはプラットフォームに依存しない形式でビルドルールを記述する。

動作条件

Antを動作させるには、バージョン1.2以上のJDKがインストールされている必要がある。

Antのインストール

The Apache Ant ProjectのサイトからAntの書庫ファイルをダウンロードする。ダウンロードしたAntの書庫ファイルを解凍して、任意のディレクトリに配置する。

環境設定

Antを動作させるには、次の環境変数を設定する必要がある。

環境変数説明
ANT_HOMEAntをインストールしたディレクトリ
PATHコマンドのパス
JAVA_HOMEJavaのホームディレクトリ

また、任意で以下の環境変数を設定することもできる。

環境変数説明
ANT_OPTSAntコマンドのオプション

ANT_HOME

環境変数ANT_HOMEに、Antをインストールしたディレクトリを設定する。

UNIXシェルの場合 (sh, bash):

ANT_HOME=/usr/local/ant
export ANT_HOME

UNIX Cシェルの場合 (csh):

setenv ANT_HOME /usr/local/ant

PATH

Antをインストールしたディレクトリ (ANT_HOME) 下のbinディレクトリをパスに加える。

UNIXシェルの場合 (sh, bash):

PATH=/usr/local/ant/bin:{PATH}
export PATH

UNIX Cシェルの場合 (csh):

setenv PATH /usr/local/ant/bin:${PATH}

Antの実行

ant [option ...] [target ...]

ビルドファイル-buildfile または -file-f オプションで指定することができる。これらのオプションを指定しなかった場合は、カレントディレクトリの build.xml がビルドファイルとして使われる。

引数targetには、ビルドするターゲットを指定する。引数targetは複数指定することができる。引数targetを省略した場合は、projectタグのdefault属性で指定されたターゲットがビルドされる。

Antのコマンド行オプションを次に示す。

-buildfile file
ビルドファイルの指定
-Dproperty=value
プロパティの値を設定
-d
-debug
デバッグ情報を表示
-f file
ビルドファイルの指定
-file file
ビルドファイルの指定
-h
-help
使用方法の表示
-k
失敗したターゲットに依存しないターゲットをすべてビルド
-keep-going
失敗したターゲットに依存しないターゲットをすべてビルド
-projecthelp
プロジェクトヘルプ情報の表示
-p
プロジェクトヘルプ情報の表示
-v
-version
バージョン情報の表示

ビルドファイル

ビルドファイルはXMLで記述します。

ビルドファイルの構造を次に示します。

project
property
target
task
target
task
task

build.xml

project要素

project要素は、ビルドファイルのルート要素です。project要素には、次に示す属性があります。

project 要素の属性
属性説明必須
nameプロジェクト名No
defaultターゲットが指定されなかった場合に呼び出されるYes
basedir相対パスの基準となるディレクトリNo

project要素の例を次に示します。

<project name="AndPro" default="build.init" basedir=".">

property要素

プロパティは値を保持するための仕組みである。ビルドファイルを記述するときに、タスクの属性値に対して定数の代わりにプロパティの参照を指定することができる。プロパティの参照は「${プロパティ名}」で行う。

プロパティを設定するには、ビルドファイルの中で<property>タスクを使って定義するか、Ant起動時に-Dコマンドオプションで定義する。

property要素はproject要素の子要素です。

propertyタスクの属性
属性説明
nameプロパティ名
valueプロパティに設定する値
locationプロパティに設定するパス

property要素の例を次に示します。

<property name="enc.charset" value="Windows-31J" />
<property name="lib.dir" value="lib" />
<property name="src.dir" value="src" />
<property name="build.dir" value="build" />
<property name="classes.dir" value="classes" />

target要素

target要素はproject要素の子要素です。target要素には、次に示す属性があります。

target 要素の属性
属性説明必須
nameターゲットの名前Yes
dependsターゲットの前に実行される依存ターゲットNo
if指定したプロパティが設定されていれば、ターゲットが実行されるNo
unless指定したプロパティが設定されていなければ、ターゲットが実行されるNo
descriptionターゲットの説明No

target要素の例を次に示します。

<target name="build.all"
 depends="build.src, classes.init, resource.escape, copy.dir">
</target>

<target name="build.src" depends="build.init">
 <javac srcdir="${src.dir}" destdir="${build.dir}" encoding="${enc.charset}">
  <classpath refid="lib.classpath" />
  <include name="**/*.java" />
 </javac>
</target>

<target name="resource.escape">
 <native2ascii src="${resource.dir}" dest="${esc.resoruce.dir}"
 encoding="${enc.charset}" includes="_ja.properties" ext="".properties" />
</target>

arg要素

いくつかのタスクは、引数を他プロセスのコマンド行に渡す。このような場合、タスクの子要素としてarg要素を指定する。

属性説明省略
valueひとつのコマンド行引数。空白文字を含めることができる。いずれかひとつ必須
lineスペースで区切られた、コマンド行引数のリスト

パス類似構造(Path要素、Classpath要素)

パス類似構造は、複数のファイルやディレクトリから構成されるパスを表現することができる。

Path要素及びClasspath要素の属性
属性説明必須
pathファイルやディレクトリのリストを「:」や「;」で区切って記述する。
location単一のファイル又はディレクトリを記述する。
refid事前定義したパス類似構造を参照する。

子要素として持つことのできる要素は次の通り。

Classpath要素のサンプルを以下に示す。

<classpath path="/usr/local/java/ant-contrib-1.0b.jar:/usr/local/java/log4j-1.2.15.jar" />

Pathelement要素

Pathelement要素は、パス類似構造の子要素として用いられる。パス類似構造と異なり、子要素を持つことはできない。

Pathelement要素の属性
属性説明必須
pathファイルやディレクトリのリストを「:」や「;」で区切って記述する。
location単一のファイル又はディレクトリを記述する。
refid事前定義したパス類似構造を参照する。

Pathelement要素では、path属性、location属性又はrefid属性のいずれか1つを指定する。

Pathelement要素のサンプル以下に示す。

<classpath>
    <pathelement location="/usr/local/java/ant-contrib-1.0b.jar" />
    <pathelement location="/usr/local/java/log4j-1.2.15.jar" />
</classpath>

タスク

タスクはtarget要素の子要素である。

タスクには様々な種類がある。

Antのタスク
タスク説明
antcall同じビルドファイル内のターゲットを呼び出す。
signjarjarファイルに署名する。
checkstyle指定したJavaファイルに対してCheckstyleを実行する。
copyひとつのファイルまたはファイルセット(ファイルの集合)をコピーする。
condition指定した条件が真の場合にプロパティを設定する。
echo
exec
Input入力プロンプトを表示して、ユーザの入力を受け付ける。
jar
java
javacJavaソースファイルをコンパイルする
javadoc
native2ascii
junitJUnitのテストフレームワークからテストを実行する。
Input入力プロンプトを表示して、ユーザの入力を受け付ける。

antcall

antcallは現在処理中の同じビルドファイル内のターゲットを呼び出す。

antcallの必須属性を次に示す。

target

実行するターゲット名を指定する。

antcallのオプション属性を次に示す。

inheritall

プロパティを呼び出し先のプロジェクトに引き継ぐか(true)、引き継がないか(false)を指定する。デフォルトはロパティを呼び出し先のプロジェクトに引き継ぐ(true)。

signjar

jarファイルに署名する。

signjarタスクの必須属性
属性説明
jar署名するjarファイル名を指定する。<fileset>が指定されていないときは必須である。
alias署名するための別名を指定する。
storepassキーストア整合性のためのパスワードを指定する。
signjarタスクのオプション属性
属性説明
keystoreキーストアの場所を指定する。
signjarタスクの子要素
要素説明
<fileset>署名するjarファイルのファイルセットを指定する。

signjarの記述例を次に示す。

<signjar alias="itref" storepass="itref" keystore="keystore">
  <fileset dir="${client-master}/lib" includes="*.jar" />
</signjar>

copy

ひとつのファイルまたはファイルセット(ファイルの集合)をコピーする。デフォルトでは、コピー元ファイルがコピー先ファイルよりも新しいか、コピー先ファイルが存在しない場合にのみ、ファイルがコピーされる。

属性説明
fileコピー元ファイルのパス
tofileコピー先ファイルのパス
todirコピー先ディレクトリのパス
overwriteコピー先ファイルがコピー元ファイルより新しくてもコピーするか否かを、trueまたはfalseで指定。デフォルトはfalse。

ファイルをコピーするビルドファイルの例を次に示す。

<?xml version="1.0"?>
<project default="target.default">
 <target name="target.default">
  <copy file="build.xml" tofile="build.xml.bak"/>
 </target>
</project>

上記ビルドファイルの実行例を次に示す。

$ ant
Buildfile: build.xml

target.default:
     [copy] Copying 1 file to /home/antuser

BUILD SUCCESSFUL
Total time: 1 second
$

echo

メッセージを標準出力へ出力する。file属性を指定することにより、ファイルへ出力することもできる。

属性説明省略
messageエコーするメッセージ
fileメッセージを書き込むファイル名

メッセージを子要素で指定する例

<echo>Hello, world!</echo>

メッセージをmessage属性で指定する例

<echo message="Hello, world!"/>

Java VMシステムプロパティのos.nameをエコーする例

<echo>${os.name}</echo>

exec

システムコマンドを実行する。コマンド行引数は、arg要素で指定する。

属性説明省略
executable実行するコマンド。コマンド行引数は何もつけない。不可
osコマンドを実行するオペレーティングシステムのリスト。現在のOS名がこのリストに含まれていれば、コマンドが実行される。OSの名前は、Java仮想マシンにより決定され、os.nameシステムプロパティに設定されている。
<property name="host" value="myhost"/>

<exec executable="traceroute" os="SunOS">
 <arg value="${host}"/>
</exec>

jar

JAR 形式のアーカイブ生成する。

java

Java のクラスを実行する。

属性説明省略
classname実行するJavaのクラスいずれかひとつ必須
jar実行するjarファイルの位置

javac

Java のソースファイルをコンパイルする。

javac要素の必須属性を次に示す。

srcdir

Javaのソースファイル (*.java) があるディレクトリ

javac要素のオプション属性を次に示す。

classpath

使用するクラスパス

debug

クラスファイルを生成する際に、デバッグ情報を生成する(on)かデバッグ情報を生成しない(off)かを指定する。デフォルトはデバッグ情報を生成しない(off)。

debuglevel

生成するデバッグ情報の種類を指定する。none又は次のいずれかの値をカンマ(,)で区切って指定する。lines、vars又はsource。

deprecation

推奨されないAPIが使用されているソースの場所を出力するか否かを、onoff で指定する。デフォルトは off

encoding

Javaソースファイルのエンコーディングを指定する。

fork

別プロセスを起動してコンパイルする(on)か別プロセスを起動せずにコンパイルする(off)かを指定する。デフォルトは別プロセスを起動せずにコンパイルする(off)。

memorymaxmumsize

fork="on"のときに最大メモリサイズを指定する。

optimize

最適化オプションをつけてコンパイルする(on)か最適化オプションをつけずにコンパイルする(off)かを指定する。デフォルトは最適化オプションをつけずにコンパイルする(off)。

target

指定したVMバージョン用のクラスファイルを生成する。

verbose

コンパイラの動作について冗長なメッセージを出力するか否かを、yesno で指定する。デフォルトは no

javacの子要素を次に示す。

javadoc

Javaのソースファイルからドキュメントを生成する。

junitタスク

Antのjunitタスクは、JUnitのテストフレームワークからテストを実行する。

junitタスクの属性
属性説明
forkテストを別の仮想マシンで実行する。
haltonerrorテスト実行中にエラーが起こった場合にビルドのプロセスを中止する。
haltonfailureテストが失敗した場合又はテスト実行中にエラーが起こった場合にビルドのプロセスを中止する。
maxmemory起動された仮想マシンに割り当てられるメモリの総量
printsummary各テストケース毎に一行の統計値を出力するか否かを指定する。デフォルトはoff。
  • on
  • off
  • withOutAndErr(出力する。同時にSystem.out及びSystem.errにも出力する。)
timeout指定された時間内にテストが終わらない場合は、そのテストをキャンセルする。

native2ascii

ネイティブな文字コードで作成されたファイルをASCIIコードに変換する。

Input要素

Input要素は、ビルド中に入力プロンプトを表示して、ユーザの入力を受け付ける。

Input要素の属性
属性説明必須
addproperty入力された値を設定するプロパティの名前を指定する。既存のプロパティを上書きすることはできない。
defaultvalue入力が空だったときの、プロパティの規定値を指定する。
messageビルド中にユーザに表示するメッセージの文字列を指定する。
validargs入力として有効な値を「,」で区切って指定する。値は大文字と小文字を区別する。プロンプトで入力した値が有効な値のいずれにも一致しない場合、入力値を受け付けない。

condition

条件が真である場合は、プロパティに値を設定される。プロパティに設定される値は、value属性を省略した場合は"true"、value属性を指定した場合はその属性値である。

conditionタスクの属性
属性説明
propertyプロパティの名前。
valueプロパティに設定する値。デフォルト値は"true"。

条件は、ネストした子要素で指定する。条件として指定できる子要素は次のとおり。

conditionタスクの条件として指定可能な要素
要素説明
available指定したクラス、ファイル又はリソースが存在する場合に真となる。availableタスクと機能は同じであるが、property属性及びvalue属性は無視される。
not子要素のとして包含する条件の結果を否定する。
issetプロパティが存在する場合に真となる。
osオペレーティングシステムが指定されたタイプの場合に真となる。

ファイルbuild.xmlが存在する場合、プロパティflagに"true"を設定する例を示す。

<condition property="flag">
    <available file="build.xml" />
</condition>

isset

プロパティが存在する場合に真となる。

isset要素の属性
属性説明
propertyプロパティの名前

os

現在のオペレーティングシステムが指定されたタイプであるかどうかをテストする。属性を複数指定した場合は、すべてのテストが成功した場合にのみ真となる。

os要素に必須属性はない。os要素のオプション属性を次に示す。

family

オペレーティングシステムのファミリを指定する。"dos"、"mac"、"netware"、"os/2"、"unix"又は"windows"など。

name

オペレーティングシステムの名前を指定する。

arch

オペレーティングシステムのアーキテクチャを指定する。"x86"、"i386"、"i486"、"i586"、"i686"、"x86_64"、"amd64"又は"sparc"など。

version

オペレーティングシステムのバージョンを指定する。

os要素の使用例を次に示す。

<condition property="is64bit">
    <os arch="x86_64" />
    <os arch="amd64" />
</condition>

checkstyle

指定したJavaファイルに対してCheckstyleを実行する。子要素として指定可能は要素は次のとおり。

property要素の属性
属性説明必須
keyプロパティのキーYes
value文字列と指定するプロパティの値value又はfileのいずれか
fileファイルとして指定するプロパティの値