Java Antコマンド

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

動作条件

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

Antのインストール

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

環境設定

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

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

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

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

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
Ant build XML
Figure 1. Ant 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 同じビルドファイル内のターゲットを呼び出す。
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の必須属性を次に示す。

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

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

message
エコーするメッセージ

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

<echo message="Hello, world!"/>
file
メッセージを書き込むファイル名

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

<echo>Hello, world!</echo>

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

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

exec

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

以下に示す属性をexec要素のタグに指定することができる。

executable
実行するコマンドを指定する。ただし、実行するコマンドに渡す引数は付けない。exec要素の必須属性であり、省略することができない。
<property name="host" value="myhost"/>
<exec executable="traceroute">
  <arg value="${host}"/>
</exec>
os
実行するオペレーティングシステムのリスト。現在のOS名がこのリストに含まれていれば、コマンドが実行される。OSの名前は、Java仮想マシンにより決定され、os.nameシステムプロパティに設定されている。
<exec executable="ls" os="SunOS">
</exec>

jar

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

以下に示す属性をjar要素のタグに指定することができる。

destfile
作成するJARファイルのパス

jar要素の必須属性であり、省略することができない。

basedir
ファイルを取得するディレクトリのパス
<jar destfile="${dist}/lib/app.jar" basedir="${build}/classes"/>
excludes
アーカイブから除外するファイルのパターンをカンマまたはスペースで区切ったリスト
<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

Java のクラスを実行する。

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

javac

javacコマンドで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)。
srcdir
Javaのソースファイル (*.java) があるディレクトリ
<javac srcdir="${src}" destdir="${build}" classpath="example.jar"/>

javac要素のsrcdir属性の代わりに、src子要素でソースファイルを指定することもできる。

<javac destdir="${build}" classpath="example.jar">
  <src path="${src}"/>
</javac>
target

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

verbose

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

javacの子要素を次に示す。

javadoc

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

junitタスク

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

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

native2ascii

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
オペレーティングシステムのファミリを指定する。
name
オペレーティングシステムの名前を指定する。
arch
オペレーティングシステムのアーキテクチャを指定する。
version
オペレーティングシステムのバージョンを指定する。

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

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

関連記事

Apache Maven
ソフトウェア開発環境を管理・統合するプロジェクト管理ツール

参考文献

The Apache Software Foundation (2022) Apache Ant 1.10.13 Manual