build.xmlが苦手、という人は意外と多いと思います。私もつい最近まで避けていました。しかし、勉強してみると、超簡単なことが分かりました。
このページでは、実案件のbuild.xmlが読めるようになることを目指します。
Contents
Antとは何か?
AntはJava向けのビルドツールです。ビルドとは、.javaファイル群をまとめて実行可能な.jarや.warを作ることです。
AntはApacheソフトウェア財団によって管理・メンテナンスが続けられています。
2021年でも、Antでビルドを行なっているプロジェクト、ソフトウェアはたくさんあります。
2000年代にスクラッチで開発されて、メンテナンスし続けているパッケージソフトウェアではビルドツールにAntが使用されている事が多いです。その頃のパッケージをカスタマイズして納品するような場合、2021年でもAntをお目にすることがあります。
AntとMaven、Gradleの違いは?
Ant<Maven<Gradleの順にできることが増えていきます。
ツール名 | 特徴 |
Ant | ビルドツール。 build.xmlにビルド手順を記述する。 |
Maven | プロジェクト管理ツール。 pom.xmlに依存ライブラリーやビルド手順を記述する。 |
Gradle | プロジェクト管理ツール。 build.gradleに依存ライブラリーやビルド手順を記述する。 |
Antのインストール
IDEを使わない場合
Antのzipをダウンロードして、ディレクトリごと任意の場所に配置します。
環境変数を2つ指定します。
環境変数名 | 指定する値 |
Path | antのjarファイルがあるディレクトリ(bin)を追記する。 antをコマンドを実行するために必要。 |
ANT_HOME | ant一式ディレクトリを指定する。 他のアプリからantを実行する場合にこの変数が参照される。 |
IDE(inteliJ IDEA等)を使う場合
intelliJ IDEAやEclipseには既にAntが組み込まれているため、インストールは不要です。
プロジェクトルート直下にbuild.xmlを作成して、右クリックでタスクを実行することができます。
Antの実行
build.xmlの書き方を見る前に、実行方法を押さえておきます。
ポイントは、ant target名で記述します。
target名を省略すると、project要素のdefault属性で指定されているtargetが実行されます。
default属性が記述されていないと、antは何も実行しません。
Antのbuild.xmlの書き方
Antのbuild.xmlの全体像
build.xmlの各要素を見る前、下のXMLを見て下さい。基本的な構成はこうなっています。
<project name="プロジェクト名" default="デフォルトターゲット名">
<property name="キー" value="値">
<target name="ターゲット名1">
... some tasks
</target>
・・・
<target name="ターゲット名n">
... some tasks
</target>
</project>
それぞれの要素は次のようになっています。
要素 | 意味・属性 | 例 |
<project> | build.xmlのルート要素。プロジェクトの名前と、ant実行時のデフォルトターゲットを記述する。 | <project name="sample-project" default="target1"> |
<property> | build.xml内の変数宣言。定義した値は ${キー}の形で使える。 | <property name="property1" value="value1"> |
<target> | Antタスクを宣言する。定義したタスクはコマンドにおいて、 ant ターゲット名 で実行できる。 | <target name="target1" depend="target2,target3"> |
Antのtarget要素で利用できる組み込みタスク
Antは何らかのタスク、特にJavaプロジェクトのビルドを実行することが目的です。そのため、<target>要素でどんなタスクをさせるかということが肝になります。
Antには、<target>要素で利用できる組み込みタスクがあり、それらを組み合わせてビルド手順を定義していきます。
要素 | 意味・属性 | 例 |
<echo> | 標準出力に何らかの文字列を出力します。 <property>要素で宣言した変数は${キー}の形で参照できます。 | <echo message="${property1}のビルドを開始します。"> |
<mkdir> | ディレクトリを作成する。 | |
<copy> | ファイルをコピーする。 | |
<delete> | ディレクトリまたはファイルを削除する。 | |
<zip> | ディレクトリ配下のファイルをZIP圧縮する。 | |
<javac> | javacコマンドを実行、つまりコンパイルして.classファイル群を作成する。 | |
<java> | javaコマンドを実行する。 |
Antのpropertyやtargetで利用できる組み込みプロパティ
その他
Antターゲットの依存関係
Antの素晴らしい点は、タスクの依存関係を定義できることです。タスクが重複している場合は、自動解決、つまり重複しているタスクを省いて実行してくれます。