Javaソースツリーをコンパイルします。
Javaソースファイルをコンパイルするために、
コンパイル元とコンパイル先のディレクトリを再帰的に走査します。
Javaファイルは、対応する.classファイルが存在しないか、
.javaファイルよりもクラスファイルが古い場合にのみ、
コンパイルされます。
注意: Antは、リビルドが必要なクラスを見つけるために、
ソースとクラスのファイル名だけを使用します。
ネストクラスに関しては、ソースファイルとクラスファイルの名前が異なり、
ソースが検索されません。
存在/更新時間だけでない、他の方法による依存性の検査をするには、
<depend>
タスクを見てください。
ソースファイルがパッケージの一部のときは、 ソースツリーのディレクトリ構造は、パッケージ階層に従っていなければいけません。
コンパイルされるファイルの集合を絞り込むことができます。
これにはincludes、includesfile、
excludes、excludesfile属性を使用することができます。
includesやincludesfile属性を使って、取り込みたいファイルを指定します。
excludeやexcludesfile属性は、除外したいファイルを指定するために使用します。
両方のケースで、ファイル名か関連するディレクトリ(複数)を使って、
ファイルのリストを指定できます。
srcdir属性、ネストした<src>要素(複数)、
ワイルドカードを含むパターンを使います。
ファイルの包含/排他の処理方法や、ワイルドカードパターンの記述方法については
ディレクトリベースのタスク
の章を見てください。
異なるコンパイラを使用できます。
これは、build.compilerプロパティーで指定でき、
ビルドを通して、すべての<javac>タスクに影響します。
またはcompiler属性を使うと、
現在の<javac>タスクに対して指定できます。
build.compilerプロパティーとcompiler属性
に有効な値は次のものです:
classic (JDK 1.1/1.2の標準コンパイラ) –
javac1.1 と
javac1.2 が別名として使えます。modern (JDK 1.3/1.4/1.5の標準コンパイラ) –
javac1.3 と
javac1.4 と
javac1.5 が別名として使えます。jikes (Jikes
コンパイラ).jvc (MicrosoftのSDKのJava / Visual J++ 用のコマンドラインコンパイラ) –
microsoftが別名として使えます。kjc (kopi
コンパイラ).gcj (gccのgcjコンパイラ)sj (Symantecのjavaコンパイラ) –
symantecが別名として使えます。extJavac (それ自身のJVMの中でmodernかclassic
のどちらかで実行されます)デフォルトはjavac1.xで、xは
Antを実行するときに使用したJDKのバージョンに依存します。
これらの提供されたコンパイラの他に、
異なるコンパイラのインターフェイスを使いたい場合は、
CompilerAdapterインターフェイス(org.apache.tools.ant.taskdefs.compilersパッケージ)
を実装したクラスを書くことができます。
build.compilerプロパティーかcompiler属性に
完全クラス名を指定してください。
fork属性はbuild.compilerプロパティーや
compiler属性の指定を上書きし、
JAVA_HOMEで指定されたJDK1.1以降のコンパイラが期待されています。
compiler属性を使うことで、
コマンドラインスイッチを使いたいときに、
AntにどのJDKのバージョンを使うかを伝えることができます。
fork="true"を指定した場合でも適用されます。
これは、JDK1.2+を使っていて、JDK1.1を実行したいときに便利です。
compiler="javac1.1"と
(例えば)depend="true"を指定したとき、
Antは-Xdependの代わりに
-dependのコマンドラインスイッチを使用します。
このタスクはコンパイラに渡すクラスパスから、存在しない ファイルやディレクトリへのすべてのエントリーを省きます。
Windows 注意:
Windows上でforkなしのモードで、modernコンパイラが使われている場合、
<javac>タスクのクラスパス中の
存在するファイルをロックし、これらを開放しません。
この副作用として、ビルド中は
これらのファイルを削除、移動することができません。
これの対処は、コンパイラを実行するときにforkすることです。
| 属性 | 説明 | 必須 |
| srcdir | Javaファイルの場所(下の Noteを参照)。 | ネストした<src>
要素が存在しないかぎりYes |
| destdir | クラスファイルを保存する場所 | No |
| includes | 包括するファイル(ワイルドカードを使って指定が可能)の カンマかスペースで区切られたリスト。 省略した時には、すべてのファイルを含みます。 | No |
| includesfile | 包括するファイル(ワイルドカードを使って指定が可能)の リストを記述したファイルの名前。 | No |
| excludes | 除外するファイル(ワイルドカードを使って指定が可能)の カンマかスペースで区切られたリスト。 省略したときには(デフォルト除外集合を除けば)除外されるファイルはありません。 | No |
| excludesfile | 除外するファイル(ワイルドカードを使って指定が可能)の リストを記述したファイルの名前。 | No |
| classpath | 使用するクラスパス | No |
| sourcepath | 使用するソースパス。
デフォルトはsrcdir属性(あるいはネストした<src>要素)の値です。
sourcepathスイッチを抑制するにはsourcepath=""を使ってください。 |
No |
| bootclasspath | ブートストラップのクラスファイルの場所 | No |
| classpathref | 使用するクラスパスで、 他で定義されているPATHに対する参照を指定します。 | No |
| sourcepathref | 使用するソースパスで、 他で定義されているPATHに対する参照を指定します。 | No |
| bootclasspathref | ブートストラップのクラスファイルの場所で、 他で定義されているPATHに対する参照を指定します。 | No |
| extdirs | インストール済み拡張機能の場所 | No |
| encoding | ソースファイルのエンコーディング (Note: gcjではまだこのオプションはサポートされていません)。 | No |
| nowarn | コンパイラに-nowarnスイッチを渡すかどうか
を指定します。デフォルトはoffです。 |
No |
| debug | デバッグ情報を付けてコンパイルするかどうかを指定します。
デフォルトはoffです。
off、-g:noneに設定すると、
コンパイラのコマンドラインの通過をサポートします。
(他のコンパイラで、コマンドライン引数がない時に使われます。)
trueを設定すると、debuglevel属性の値は、
コマンドライン引数を決めます。
|
No |
| debuglevel |
-gコマンドラインスイッチに追加する
キーワードのリスト。
modernとclassic(ver >= 1.2)
以外の実装では、無視されます。
正式な値はnoneか、カンマで区切られた次のキーワードのリストです。
lines、vars、source。
debuglevelが指定されなかった場合は、
デフォルトで-gに何も付加されません。
debugが有効でない場合は、この属性は無視されます。
|
No |
| optimize | 最適化オプションを付けてコンパイルするかどうか
を指定します。デフォルトはoffです。 |
No |
| deprecation | deprecation情報をつけてコンパイルするかどうか
を指定します。デフォルトはoffです。 |
No |
| target | 指定したVMのバージョンに対して、クラスファイルを生成します
(例、1.1や1.2)。
デフォルトの値はAntを実行しているJVMに依存することに注意してください。
特に、JDK1.4以上を使う場合、生成されたクラスは、
この属性を1.1の値にしないかぎり、1.1のjava VMで使用できません。
(JDK1.1をデフォルトで利用できるのは1.3までです) |
No |
| verbose | コンパイラに冗長な出力をさせます。デフォルトは、no |
No |
| depend |
依存性の追跡をサポートしているコンパイラ
(jikesやclassic)で、
それを有効にします。 |
No |
| includeAntRuntime | Antランタイムライブラリをクラスパスに含めるかどうか。
デフォルトはyesです。 |
No |
| includeJavaRuntime | 実行するVMのデフォルトのランタイムライブラリを
クラスパスに含めるかどうか。
デフォルトはnoです。 |
No |
| fork | 外部のJDKコンパイラを使ってjavacを
実行するかどうか。
デフォルトはnoです。 |
No |
| executable | executableはfork="yes"の場合に
使用されます。
デフォルトは現在Antを実行しているJavaのバージョンのコンパイラです。
fork="no"のときは無視されます。Ant 1.6からこの属性は、jikes、jvc、gcj、sj使用時にexecutableへパスの指定ができます。 |
No |
| memoryInitialSize | 基本的なVMに割り当てるメモリの初期サイズ。
javacが外部で実行された場合以外は無視されます。
デフォルトは標準のVMのメモリ設定です
(例:83886080、81920k、80m) |
No |
| memoryMaximumSize |
基本的なVMに割り当てるメモリの最大サイズ。
javacが外部で実行された場合以外は無視されます。
デフォルトは標準のVMのメモリ設定です
(例:83886080、81920k、80m) |
No |
| failonerror |
コンパイルが失敗したときに、ビルドを続けるかどうかを指定します。
デフォルトはtrueです。
|
No |
| source |
-sourceコマンドラインスイッチの値です。
javac1.4
(あるいはAntを1.3のVMで実行していないときのmodern)
やjikesを除いた実装前では、無視されます。
jikesでこの属性を使う場合は、
-sourceスイッチをサポートするjikesのバージョンで
なければなりません。
正式な値は 1.3と1.4と1.5で、
デフォルトでは-source属性は使われません。
| No |
| compiler |
コンパイラの実装に使います。
もしこの属性が設定されていなければ、build.compilerプロパティの値になり、
設定されていれば、それが使われます。
他には、現在のVMのデフォルトコンパイラが使われます。
(有効なコンパイラのリストを参照してください。)
|
No |
| listfiles | コンパイルされるソースファイルがリストされているか示します。デフォルトは、no |
No |
| tempdir | Antが作業ファイルを置くべき場所です。 もしタスクが分けられ、コマンドライン引数の長さが4kを超えるときだけに、これは使われます。 Ant 1.6から | No。デフォルトは、現在の作業ディレクトリ |
このタスクは暗黙のファイルセットを持っていて、
ネストした<include>、<exclude>、<patternset>要素
と同様に、
<fileset>の属性(dirはsrcdirになります)
のすべてをサポートします。
src、classpath、sourcepath、
bootclasspath、extdirs<javac>のsrcdir、classpath、
sourcepath、bootclasspath、
extdirs属性は
パス類似構造であり、
それぞれネストした
<src>、
<classpath>、
<sourcepath>、
<bootclasspath>、
<extdirs>要素によって指定することができます。
ネストした<compilerarg>要素で、
コンパイラに対して追加のコマンドライン引数を指定することができます。
これらの要素はコマンドライン引数のように指定できますが、
有効な引数として使えるのは追加する属性が、与えられたコンパイラの実装で
使われている場合のみです。
| 属性 | 説明 | 必須 |
| value | コマンドライン引数を参照 | 必ずこのうちの1つ |
| line | ||
| file | ||
| path | ||
| compiler | 選択されたコンパイラ実装が、この属性の値と合う場合のみ、 指定した引数が渡されます。 正式な値は、上の有効なコンパイラのリスト と同じものです。) | No |
<javac srcdir="${src}"
destdir="${build}"
classpath="xyz.jar"
debug="on"
/>
${src}ディレクトリ以下のすべての.javaファイル
をコンパイルし、.classファイルを${build}ディレクトリに保存します。
使用するクラスパスはxyz.jarを含み、
デバッグ情報をonにしてコンパイルします。
<javac srcdir="${src}"
destdir="${build}"
fork="true"
/>
${src}ディレクトリ以下のすべての.javaファイル
をコンパイルし、.classファイルを${build}ディレクトリに保存します。
これは、デフォルトのjavac実行を使って、
javacコンパイルをフォークします。
<javac srcdir="${src}"
destdir="${build}"
fork="java$$javac.exe"
/>
${src}ディレクトリ以下のすべての.javaファイル
をコンパイルし、.classファイルを${build}ディレクトリに保存します。
これは、java$javac.exeという名前の実行ファイルを使って、
javacコンパイラをフォークします。
$記号が2つめの$でエスケープされることに注意してください。
<javac srcdir="${src}"
destdir="${build}"
includes="mypackage/p1/**,mypackage/p2/**"
excludes="mypackage/p1/testpackage/**"
classpath="xyz.jar"
debug="on"
/>
${src}ディレクトリ以下のすべての.javaファイル
をコンパイルし、.classファイルを${build}ディレクトリに保存します。
使用するクラスパスはxyz.jarを含み、デバッグ情報がonになっています。
mypackage/p1とmypackage/p2以下のファイルだけが使用されます。
mypackage/p1/testpackageディレクトリ内およびその下のファイルは、
コンパイルから除外されます。
<javac srcdir="${src}:${src2}"
destdir="${build}"
includes="mypackage/p1/**,mypackage/p2/**"
excludes="mypackage/p1/testpackage/**"
classpath="xyz.jar"
debug="on"
/>
これは、前のサンプルと同じですが、プロパティsrc2で定義される二番目のソースパスが追加されています。
これは、次のようなネストした<src>要素を使用しても記述できます。
<javac destdir="${build}"
classpath="xyz.jar"
debug="on">
<src path="${src}"/>
<src path="${src2}"/>
<include name="mypackage/p1/**"/>
<include name="mypackage/p2/**"/>
<exclude name="mypackage/p1/testpackage/**"/>
</javac>
異なるJDKのjavacコンパイラを実行したい場合、 コンパイラを探す場所、使用するJDKのバージョンを、 正しいコマンドラインスイッチを選択して、 Antに伝えなければなりません。 次の例は新しいプロセスでJDK1.1のjavacを実行します。 Antが異なるバージョンのJava VMで実行されても、 正しいコマンドラインスイッチが使われます。
<javac srcdir="${src}"
destdir="${build}"
fork="yes"
executable="/opt/java/jdk1.1/bin/javac"
compiler="javac1.1"
/>
注意:
普通にルート以下のあるパッケージのソースファイルだけをコンパイルしたい場合、
パッケージをフィルターするために
include/exclude属性や
<include>/<exclude>のネストされた要素
を使ってください。
srcdir属性(あるいはネストした<src>要素)で、
パッケージ構造の一部を含めないでください。
Antはコンパイルのターゲットを実行する度にソースファイルをリコンパイルします。
追加情報はAnt FAQ
を参照してください。
明確に指定されたファイルのみのコンパイルを希望して、 javacのデフォルト検索メカニズムを無効にするならば、 sourcepath属性をセットしないことができます。
<javac sourcepath="" srcdir="${src}"
destdir="${build}" >
<include name="**/*.java" />
<exclude name="**/Example.java" />
</javac>
この方法でjavacは、"${src}"ディレクトリ以下すべてのjavaソースファイルをコンパイルしますが、exampleをスキップします。 もし、exampleでないファイルがそれらを参照すれば、コンパイラはエラーを生成します。
注意: Windows上でAntを使用する場合には、外部コンパイラを使用するたびに新しいDOSのウィンドウがポップアップしますが、 これはあなたが使用しているJDKの問題だと思われます。 この問題は、JDK< 1.2のすべてのJDKで発生する可能性があります。
Jikes は、
タスクを呼び出す前に、以下に示すようなプロパティーを設定することで、
いくつかの拡張オプションをサポートします。
各プロパティーの設定は、ビルドを通して、
すべての<javac>タスクに影響を与えます。
Antの開発者は、これは醜く融通の利かないことだと気づきます。
– 将来はもっとよい方法が期待されています。
すべてのオプションはbooleanで、falseの他に解釈されるには、
trueかyesを設定しなければなりません。
デフォルトでは、build.compiler.warningsはtrueで、
他のすべてのプロパティーはfalseです。
| プロパティー | 説明 | デフォルト |
| build.compiler.emacs | emacs互換のエラーメッセージを有効にします。 |
false
|
| build.compiler.fulldepend |
完全な依存性検査を有効にします。Jikesのマニュアルの
+Fスイッチを参照してください。
|
false
|
| build.compiler.pedantic | 詳細な警告を有効にします。 |
false
|
|
build.compiler.warnings 推奨されません。 代わりに <javac>のnowarn属性を使ってください。
|
警告メッセージを無効にしません。 |
true
|
間違って<javac>を呼び出す前に、
build.compiler.jvc.extensionsプロパティを設定することがない限り、
JvcはMicrosoft拡張を有効にします。
Copyright © 2000-2004 The Apache Software Foundation. All rights Reserved.
[訳注:これは西野 亨、宮本信二の訳を参考に、横田聡が翻訳しました。日本語訳に対するコメントがあれば report@jajakarta.orgに送ってください]