7. 基本的なタスク
2012年08月16日 シナジーマーケティング(株) 西尾 義英
- 7.1. プロパティ(Property)
- 7.2. ファイルシステム(Mkdir, Copy, Move, Delete)
- 7.3. コンパイル(Javac)
- 7.4. パッケージ(Jar, War)
- 7.5. テスト(JUnit)
- 7.6. 実行
この章では実際の開発によく使う基本的なタスクを説明します。
7.1 プロパティ(Property)
2.1. プロジェクト にてプロパティについて少し説明しましたがもう少し詳しく説明します。
プロパティを設定するには
主にPropertyタスクかコマンドライン引数で指定します。
Propertyタスクではその場で値を設定するだけでなく、ファイルや環境変数からプロパティを取り込む事もできます。
<!-- 環境変数から読み込み --> <property environment="env" /><!-- ${env.hostname} などが利用可能に --> <!-- ファイルから読み込み --> <property file="build.properties" /> <!-- name=value 形式で指定 --> <!-- その場で指定 --> <property name="src" location="src" /> <!-- ソースディレクトリ --> <property name="deploy.server" value="localhost" /> <!-- デプロイ先を指定 -->
また、ビルド実行時の状態をプロパティにセットするタスクがいくつかあります。
- Tstamp
- Available
- Uptodate
- Condition
各タスクの使い方はマニュアルを参照して下さい。
パスを指定する場合
プロパティにはディレクトリのパスを記述することが多いですが、この時valueではなくlocationを使うべきです。locationを使うと以下のメリットがあります。
- 実行環境毎のパス区切りの違い(/, \)を吸収する
- プロジェクトのbasedirからの相対パスを正しく解釈し、絶対パスに展開する
プロパティのスコープ
Antにおけるプロパティはグローバル1 、かつ一番最初に定義された値から上書き出来ない仕組みになっています。のため、以下のように後に行くほど一般的な設定としておき、特殊な設定があれば上書きされるようにしておくのが一般的です。
<property file="build.${user.name}.properties" /> <!-- 開発者毎の設定があれば上書き --> <property file="build.${os.name}.properties" /> <!-- 実行環境毎の設定があれば上書き --> <property file="build.properties" /> <!-- デフォルト設定 -->
またコマンドライン引数でプロパティを指定するとそれは一番最初に指定したことになるので、任意のプロパティを上書きすることが出来ます。
7.2. ファイルシステム(Mkdir, Copy, Move, Delete)
Mkdir
指定したパスでディレクトリを作成します。主にビルドしたファイルの置き場所を確保するのに使います。深い階層であっても親ディレクトリから作成し、作成済みの場合は何もしないので、ファイルを移動するターゲットでは最初に移動先のディレクトリをmkdirしておくのが無難でしょう。
属性 | 説明 | 必須 |
---|---|---|
dir | 作成するディレクトリのパス | はい |
Copy
指定したファイルまたはディレクトリをコピーします。コピー対象を指定するのに入れ子の<fileset>が使えます。2
属性 | 説明 | 必須 |
---|---|---|
todir | コピー先ディレクトリ | はい |
Move
Copyと同様ですが異動元のファイルまたはディレクトリが残りません。ファイルのリネームなどに使います。
Delete
指定したファイルまたはディレクトリを削除します。ディレクトリを指定する場合直下のファイルおよびサブディレクトリを全て削除します。ビルドの中間成果物を削除するためにcleanというターゲットを用意するのが一般的ですが、そこで使われることが多いです。対象の指定に<fileset>も使えます。2
属性 | 説明 | 必須 |
---|---|---|
file | 削除するファイルのパス | いずれかを記述。 省略した場合は子要素のリソースコレクションが設定される |
dir | 削除するディレクトリのパス |
7.3. コンパイル(Javac)
Javaソースファイルをコンパイルします。主な属性は以下の通りです。
属性 | 説明 | 必須 |
---|---|---|
srcdir | ソースディレクトリ | はい(入れ子のsrc要素がない場合は) |
destdir | クラスファイルの保存先 | いいえ |
classpathref | クラスパスの参照 | いいえ |
encoding | ソース文字コード | いいえ |
debug | デバッグ情報を付加するか。デフォルトはオフ | いいえ |
includeAntRuntime | Antのライブラリを参照するかを指定する→後述 | いいえ |
クラスパスの指定方法には様々なバリエーションがありますが、事前にクラスパスを
<path id="compile.classpath"> <fileset dir="lib"> <include name="**/*.jar" /> </fileset> <pathelement location="classes" /> </path> <javac srcdir="src" destdir="target/classpath" classpathref="compile.classpath" encoding="UTF-8" debug="true" />
includeAntRuntime
build.sysclasspathプロパティ3が定義されていないと、includeAntRuntimeはデフォルトでyesとなります。この時、Antが実行時に参照するライブラリがコンパイル時にも参照されることに注意が必要です。そのためincludeAntRuntimeはfalseを指定することが推奨されています。バージョン1.8からはこの属性を指定しないと警告が出るようになりました。
[javac] build.xml:xx:warning:'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
1 バージョン1.8.0からターゲットまたは実行スレッド毎にローカルなプロパティを設定出来るようになりました。詳しくはLocal タスクのマニュアルを参照下さい
2 1.8以降はresource collectionsに拡張されました。
3 Antの実行時クラスパスがビルド中のクラスパスの取り扱いにどう影響するかを設定します。詳しくは build.sysclasspath を参照下さい。