Apache AntはJavaベースのビルドツールである。ビルドツールとは、ソフトウェア構築の際に一連のビルド処理を自動化するためのツールである。代表的なビルドツールとして、makeがある。プラットフォームに依存する形式でビルドルールを記述するmakeに対して、Antはプラットフォームに依存しない形式でビルドルールを記述する。
Antを動作させるには、バージョン1.2以上のJDKがインストールされている必要がある。
The Apache Ant ProjectのサイトからAntの書庫ファイルをダウンロードする。ダウンロードしたAntの書庫ファイルを解凍して、任意のディレクトリに配置する。
Antを動作させるには、次の環境変数を設定する必要がある。
環境変数 | 説明 |
---|---|
ANT_HOME | Antをインストールしたディレクトリ |
PATH | コマンドのパス |
JAVA_HOME | Javaのホームディレクトリ |
また、任意で以下の環境変数を設定することもできる。
環境変数 | 説明 |
---|---|
ANT_OPTS | Antコマンドのオプション |
環境変数ANT_HOMEに、Antをインストールしたディレクトリを設定する。
UNIXシェルの場合 (sh, bash):
ANT_HOME=/usr/local/ant
export ANT_HOME
UNIX Cシェルの場合 (csh):
setenv ANT_HOME /usr/local/ant
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 [option ...] [target ...]
ビルドファイルは -buildfile または -file か -f オプションで指定することができる。これらのオプションを指定しなかった場合は、カレントディレクトリの build.xml がビルドファイルとして使われる。
引数targetには、ビルドするターゲットを指定する。引数targetは複数指定することができる。引数targetを省略した場合は、projectタグのdefault属性で指定されたターゲットがビルドされる。
Antのコマンド行オプションを次に示す。
ビルドファイルはXMLで記述します。
ビルドファイルの構造を次に示します。
project要素は、ビルドファイルのルート要素です。project要素には、次に示す属性があります。
属性 | 説明 | 必須 |
---|---|---|
name | プロジェクト名 | No |
default | ターゲットが指定されなかった場合に呼び出される | Yes |
basedir | 相対パスの基準となるディレクトリ | No |
project要素の例を次に示します。
<project name="AndPro" default="build.init" basedir=".">
プロパティは値を保持するための仕組みである。ビルドファイルを記述するときに、タスクの属性値に対して定数の代わりにプロパティの参照を指定することができる。プロパティの参照は「${プロパティ名}」で行う。
プロパティを設定するには、ビルドファイルの中で<property>タスクを使って定義するか、Ant起動時に-Dコマンドオプションで定義する。
property要素はproject要素の子要素です。
属性 | 説明 |
---|---|
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要素はproject要素の子要素です。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要素を指定する。
属性 | 説明 | 省略 |
---|---|---|
value | ひとつのコマンド行引数。空白文字を含めることができる。 | いずれかひとつ必須 |
line | スペースで区切られた、コマンド行引数のリスト |
パス類似構造は、複数のファイルやディレクトリから構成されるパスを表現することができる。
属性 | 説明 | 必須 |
---|---|---|
path | ファイルやディレクトリのリストを「:」や「;」で区切って記述する。 | |
location | 単一のファイル又はディレクトリを記述する。 | |
refid | 事前定義したパス類似構造を参照する。 |
子要素として持つことのできる要素は次の通り。
Classpath要素のサンプルを以下に示す。
<classpath path="/usr/local/java/ant-contrib-1.0b.jar:/usr/local/java/log4j-1.2.15.jar" />
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要素の子要素である。
タスクには様々な種類がある。
タスク | 説明 |
---|---|
antcall | 同じビルドファイル内のターゲットを呼び出す。 |
signjar | jarファイルに署名する。 |
checkstyle | 指定したJavaファイルに対してCheckstyleを実行する。 |
copy | ひとつのファイルまたはファイルセット(ファイルの集合)をコピーする。 |
condition | 指定した条件が真の場合にプロパティを設定する。 |
echo | メッセージを標準出力へ出力する。 |
exec | システムコマンドを実行する。 |
Input | 入力プロンプトを表示して、ユーザの入力を受け付ける。 |
jar | JAR形式のアーカイブを生成する。 |
java | Javaのクラスを実行する。 |
javac | Javaソースファイルをコンパイルする |
javadoc | javadocコマンドでJavaのソースファイルからドキュメントを生成する |
native2ascii | native2asciiコマンドを使って、ネイティブな文字コードで作成されたファイルをASCIIコードに変換する。 |
junit | JUnitのテストフレームワークからテストを実行する。 |
Input | 入力プロンプトを表示して、ユーザの入力を受け付ける。 |
antcallは現在処理中の同じビルドファイル内のターゲットを呼び出す。
antcallの必須属性を次に示す。
実行するターゲット名を指定する。
antcallのオプション属性を次に示す。
プロパティを呼び出し先のプロジェクトに引き継ぐか(true)、引き継がないか(false)を指定する。デフォルトはロパティを呼び出し先のプロジェクトに引き継ぐ(true)。
jarファイルに署名する。
属性 | 説明 |
---|---|
jar | 署名するjarファイル名を指定する。<fileset>が指定されていないときは必須である。 |
alias | 署名するための別名を指定する。 |
storepass | キーストア整合性のためのパスワードを指定する。 |
属性 | 説明 |
---|---|
keystore | キーストアの場所を指定する。 |
要素 | 説明 |
---|---|
<fileset> | 署名するjarファイルのファイルセットを指定する。 |
signjarの記述例を次に示す。
<signjar alias="itref" storepass="itref" keystore="keystore">
<fileset dir="${client-master}/lib" includes="*.jar" />
</signjar>
ひとつのファイルまたはファイルセット(ファイルの集合)をコピーする。デフォルトでは、コピー元ファイルがコピー先ファイルよりも新しいか、コピー先ファイルが存在しない場合にのみ、ファイルがコピーされる。
属性 | 説明 |
---|---|
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
$
メッセージを標準出力へ出力する。出力するメッセージは、子要素またはmessage属性で指定する。file属性を指定することにより、メッセージをファイルへ出力することもできる。
メッセージをmessage属性で指定する例
<echo message="Hello, world!"/>
メッセージを子要素で指定する例
<echo>Hello, world!</echo>
Java VMシステムプロパティのos.nameをエコーする例
<echo>${os.name}</echo>
システムコマンドを実行する。コマンド行引数は、arg要素で指定する。
以下に示す属性をexec要素のタグに指定することができる。
<property name="host" value="myhost"/>
<exec executable="traceroute">
<arg value="${host}"/>
</exec>
<exec executable="ls" os="SunOS">
</exec>
JAR形式のアーカイブを生成する。
以下に示す属性をjar要素のタグに指定することができる。
jar要素の必須属性であり、省略することができない。
<jar destfile="${dist}/lib/app.jar" basedir="${build}/classes"/>
<jar destfile="${dist}/lib/app.jar"
basedir="${build}/classes"
excludes="**/Test.class"/>
jar要素は子要素としてfileset要素を持つことができる。
<jar destfile="${dist}/lib/app.jar">
<fileset dir="${build}/classes" excludes="**/Test.class"/>
<fileset dir="${src}/resources"/>
</jar>
Java のクラスを実行する。
属性 | 説明 | 省略 |
---|---|---|
classname | 実行するJavaのクラス | いずれかひとつ必須 |
jar | 実行するjarファイルの位置 |
javacコマンドでJava のソースファイルをコンパイルする。
以下に示す属性をjavac要素に指定できる。
クラスファイルを生成する際に、デバッグ情報を生成する(on)かデバッグ情報を生成しない(off)かを指定する。デフォルトはデバッグ情報を生成しない(off)。
生成するデバッグ情報の種類を指定する。none又は次のいずれかの値をカンマ(,)で区切って指定する。lines、vars又はsource。
推奨されないAPIが使用されているソースの場所を出力するか否かを、on か off で指定する。デフォルトは off。
Javaソースファイルのエンコーディングを指定する。
別プロセスを起動してコンパイルする(on)か別プロセスを起動せずにコンパイルする(off)かを指定する。デフォルトは別プロセスを起動せずにコンパイルする(off)。
fork="on"のときに最大メモリサイズを指定する。
<javac srcdir="${src}" destdir="${build}" classpath="example.jar"/>
javac要素のsrcdir属性の代わりに、src子要素でソースファイルを指定することもできる。
<javac destdir="${build}" classpath="example.jar">
<src path="${src}"/>
</javac>
指定したVMバージョン用のクラスファイルを生成する。
コンパイラの動作について冗長なメッセージを出力するか否かを、yes か no で指定する。デフォルトは no。
javacの子要素を次に示す。
javadocコマンドでJavaのソースファイルからドキュメントを生成する。
Antのjunitタスクは、JUnitのテストフレームワークからテストを実行する。
属性 | 説明 |
---|---|
fork | テストを別の仮想マシンで実行する。 |
haltonerror | テスト実行中にエラーが起こった場合にビルドのプロセスを中止する。 |
haltonfailure | テストが失敗した場合又はテスト実行中にエラーが起こった場合にビルドのプロセスを中止する。 |
maxmemory | 起動された仮想マシンに割り当てられるメモリの総量 |
printsummary | 各テストケース毎に一行の統計値を出力するか否かを指定する。デフォルトはoff。
|
timeout | 指定された時間内にテストが終わらない場合は、そのテストをキャンセルする。 |
native2asciiコマンドを使って、ネイティブな文字コードで作成されたファイルをASCIIコードに変換する。
Input要素は、ビルド中に入力プロンプトを表示して、ユーザの入力を受け付ける。
属性 | 説明 | 必須 |
---|---|---|
addproperty | 入力された値を設定するプロパティの名前を指定する。既存のプロパティを上書きすることはできない。 | |
defaultvalue | 入力が空だったときの、プロパティの規定値を指定する。 | |
message | ビルド中にユーザに表示するメッセージの文字列を指定する。 | |
validargs | 入力として有効な値を「,」で区切って指定する。値は大文字と小文字を区別する。プロンプトで入力した値が有効な値のいずれにも一致しない場合、入力値を受け付けない。 |
条件が真である場合は、プロパティに値を設定される。プロパティに設定される値は、value属性を省略した場合は"true"、value属性を指定した場合はその属性値である。
属性 | 説明 |
---|---|
property | プロパティの名前。 |
value | プロパティに設定する値。デフォルト値は"true"。 |
条件は、ネストした子要素で指定する。条件として指定できる子要素は次のとおり。
要素 | 説明 |
---|---|
available | 指定したクラス、ファイル又はリソースが存在する場合に真となる。availableタスクと機能は同じであるが、property属性及びvalue属性は無視される。 |
not | 子要素のとして包含する条件の結果を否定する。 |
isset | プロパティが存在する場合に真となる。 |
os | オペレーティングシステムが指定されたタイプの場合に真となる。 |
ファイルbuild.xmlが存在する場合、プロパティflagに"true"を設定する例を示す。
<condition property="flag">
<available file="build.xml" />
</condition>
プロパティが存在する場合に真となる。
属性 | 説明 |
---|---|
property | プロパティの名前 |
現在のオペレーティングシステムが指定されたタイプであるかどうかをテストする。属性を複数指定した場合は、すべてのテストが成功した場合にのみ真となる。
os要素に必須属性はない。os要素のオプション属性を次に示す。
os要素の使用例を次に示す。
<condition property="is64bit">
<os arch="x86_64" />
<os arch="amd64" />
</condition>
The Apache Software Foundation (2022) Apache Ant 1.10.13 Manual