Java ソースツリーをコンパイルします。
ソースディレクトリとデスティネーションディレクトリは、コンパイルする Java ソースファイルを再帰的にスキャンされます。対応する .class ファイルがない、または .class ファイルが .java ファイルよりも古い .java ファイルのみがコンパイルされます。
注意: Apache Ant は、再構築が必要なクラスを見つけるために、ソースファイルとクラスファイルの名前のみを使用します。ソースをスキャンしないため、ネストされたクラス、ソースファイルとは異なる名前のクラスなどについては認識しません。存在/変更時刻以外の依存関係チェックについては、<depend> タスクを参照してください。
ソースファイルがパッケージの一部である場合、ソースツリーのディレクトリ構造はパッケージ階層に従う必要があります。
コンパイルされるファイルのセットを絞り込むことができます。これは、includes、includesfile、excludes、および excludesfile 属性を使用して行うことができます。includes または includesfile 属性を使用して、含めるファイルを指定します。exclude または excludesfile 属性は、除外するファイルを指定するために使用されます。どちらの場合も、ファイルのリストは、srcdir 属性またはネストされた <src> 要素で指定されたディレクトリを基準としたファイル名、またはワイルドカードパターンを使用して指定できます。ファイルの包含/除外の仕組み、およびワイルドカードパターンの記述方法については、ディレクトリベースのタスクのセクションを参照してください。
異なるコンパイラを使用することができます。これは、ビルド全体で all <javac> tasksに影響を与えるグローバルな build.compiler プロパティを設定するか、現在の <javac> タスクに固有の compiler 属性を設定するか、org.apache.tools.ant.taskdefs.compilers.CompilerAdapter を実装する任意のtypedef またはcomponentdefされた型のネストされた要素を使用することで指定できます。build.compiler プロパティまたは compiler 属性の有効な値は次のとおりです。
classic(JDK 1.1/1.2 の標準コンパイラ) –
javac1.1および
javac1.2をエイリアスとして使用できます。
modern(JDK 1.3 以降の標準コンパイラ) –
javac1.3、
javac1.4、
javac1.5、
javac1.6、
javac1.7(Ant 1.8.2 以降)、
javac1.8(Ant 1.8.3 以降)、
javac1.9(Ant 1.9.5 以降)、
javac9(Ant 1.9.8 以降)、
javac10+(Ant 1.10.2 以降) をエイリアスとして使用できます。
jikes(Jikes コンパイラ)。
jvc(Microsoft の SDK for Java / Visual J++ のコマンドラインコンパイラ) –
microsoftをエイリアスとして使用できます。
kjc(kopi コンパイラ)。
gcj(GCC の
gcj コンパイラ)。sj(Symantec Java コンパイラ) –
symantecをエイリアスとして使用できます。
extJavac(modern または classic を独自の JVM で実行します)。
デフォルトは javacX
で、X
は Ant を実行している JDK のバージョンによって異なります。提供されているものとは異なるコンパイラインターフェースを使用する場合は、CompilerAdapter インターフェース (パッケージ org.apache.tools.ant.taskdefs.compilers) を実装するクラスを作成できます。build.compiler プロパティまたは compiler 属性に完全なクラス名を指定します。
fork 属性は、build.compiler プロパティまたは compiler 属性の設定をオーバーライドし、JAVA_HOME に JDK 1.1 以降が設定されていることを想定しています。
fork=true
を設定した場合でも、compiler 属性を使用して、Ant がコマンドラインスイッチをまとめるときにどの JDK バージョンを想定するかを指示することもできます。これは、現在の JDK が 1.2+ である場合に JDK 1.1 のコンパイラを実行する場合に便利です。compiler=javac1.1
と (たとえば) depend=true
を使用すると、Ant は -Xdepend の代わりにコマンドラインスイッチ -depend を使用します。
このタスクは、コンパイラに渡すクラスパスから、存在しないファイル/ディレクトリを指すすべてのエントリを削除します。
フォークされた実行可能ファイル (存在する場合) の作業ディレクトリは、プロジェクトのベースディレクトリです。
Windows の注意: Windows で modern コンパイラがフォークされていないモードで使用されている場合、<javac> タスクのクラスパスに存在するファイルがロックされ、解放されません。この副作用として、ビルドの後半でこれらのファイルを削除または移動できなくなります。回避策は、コンパイラを呼び出すときにフォークすることです。
ソースに @Native アノテーションが付加されたネイティブメソッドまたはフィールドが含まれている場合、javac の -h スイッチを使用してネイティブヘッダーファイルを生成するために、nativeheaderdir 属性を設定できます。Ant がどのファイルをコンパイルするかを決定するロジックは、ネイティブヘッダーを考慮していないことに注意してください。つまり、.class が対応する .java ファイルよりも新しい場合、ネイティブヘッダーファイルが生成されていても古くなっている場合でも、ファイルはコンパイルされません。
| 属性 | 説明 | 必須 |
|---|---|---|
| srcdir | java ファイルの場所。(以下の注記を参照してください。) | ネストされた <src> 要素または modulesourcepath 属性または対応する要素が存在しない限り、必須です。 |
| destdir | クラスファイルを保存する場所。 | いいえ |
| includes | 含める必要があるファイルのパターンのカンマまたはスペース区切りのリスト。 | いいえ; デフォルトはすべての .java ファイルです。 |
| includesfile | ファイルの名前。このファイルの各行は、include パターンと見なされます。 | いいえ |
| excludes | 除外する必要があるファイルのパターンのカンマまたはスペース区切りのリスト。 | いいえ; デフォルトはデフォルトの除外、defaultexcludes が noの場合は除外なしです。 |
| excludesfile | ファイルの名前。このファイルの各行は、exclude パターンと見なされます。 | いいえ |
| defaultexcludes | デフォルトの除外を使用するかどうかを示します (yes|no)。 |
いいえ; デフォルトは yesです。 |
| classpath | 使用するクラスパス。 | いいえ |
| sourcepath | 使用するソースパス。sourcepath スイッチを抑制するには、sourcepath= を使用します。 |
いいえ; ネストされた <src> 要素が指定されていない限り、デフォルトは srcdir です。 |
| bootclasspath | ブートストラップクラスファイルの場所。(ブートストラップクラスパスの指定に -X および -J-X パラメータを使用する方法については、以下を参照してください)。 | いいえ |
| classpathref | 使用する classpath。他の場所で定義されたパスへの参照として指定されます。 | いいえ |
| sourcepathref | 使用する sourcepath。他の場所で定義されたパスへの参照として指定されます。 | いいえ |
| bootclasspathref | 使用する bootstrapclasspath。他の場所で定義されたパスへの参照として指定されます。 | いいえ |
| extdirs | インストールされている拡張機能の場所。 | いいえ |
| encoding | ソースファイルのエンコーディング。(注意: gcj はまだこのオプションをサポートしていません。) |
いいえ |
| nowarn | -nowarn スイッチをコンパイラに渡すかどうかを示します。 | いいえ; デフォルトは offです。 |
| debug | ソースをデバッグ情報付きでコンパイルするかどうかを示します。offに設定すると、-g:none がサポートするコンパイラのコマンドラインに渡されます (他のコンパイラの場合は、コマンドライン引数は使用されません)。 trueに設定すると、debuglevel 属性の値によってコマンドライン引数が決まります。 |
いいえ; デフォルトは offです。 |
| debuglevel | -g コマンドラインスイッチに追加されるキーワードリスト。有効な値は、noneまたは次のキーワードのカンマ区切りのリストです: lines、 vars、 source。 |
いいえ; debug が falseの場合、または modern、 javac1.2、 jikes以外の実装の場合は無視されます。デフォルトでは、-g に何も追加されません。 |
| optimize | ソースを最適化してコンパイルするかどうかを示します。注意: このフラグは、JDK 1.3 以降の Sun の javac では無視されます (コンパイル時の最適化は不要なため)。 | いいえ; デフォルトは offです。 |
| deprecation | ソースを非推奨情報付きでコンパイルするかどうかを示します。 | いいえ; デフォルトは off です。 |
| verbose | コンパイラに詳細出力を要求します。 | いいえ; デフォルトは noです。 |
| depend | これをサポートするコンパイラ (jikesおよび classic) の依存関係追跡を有効にします。 |
いいえ |
| includeAntRuntime | Ant ランタイムライブラリをクラスパスに含めるかどうか。通常は、falseに設定して、スクリプトの動作が実行される環境に依存しないようにするのが最善です。 |
いいえ; build.sysclasspath プロパティが設定されていない限り、デフォルトは yesです。 |
| includeJavaRuntime | 実行中の JVM からデフォルトのランタイムライブラリをクラスパスに含めるかどうか。 注意: 一部の設定では、ランタイムライブラリが「Ant ランタイムライブラリ」の一部である場合があるため、Java ランタイムライブラリが含まれていないことを確認するために、includeAntRuntime を明示的に falseに設定する必要がある場合があります。 |
いいえ; デフォルトは noです。 |
| fork | JDK コンパイラを使用して javac を外部で実行するかどうか。 |
いいえ; デフォルトは noです。 |
| executable | fork が yesの場合に使用する javac 実行可能ファイルへの完全なパス。Ant 1.6 以降、この属性は、 jikes、 jvc、 gcj、または sjを使用する場合に、実行可能ファイルへのパスを指定するためにも使用できます。 |
いいえ; デフォルトは現在の JDK のコンパイラ、fork が noの場合は無視されます。 |
| memoryInitialSize | javac が外部で実行される場合の、基盤となる JVM のメモリの初期サイズ。(例: 83886080、 81920k、または 80m) |
いいえ; デフォルトは標準の JVM メモリ設定、fork が noの場合は無視されます。 |
| memoryMaximumSize | javac が外部で実行される場合の、基盤となる JVM のメモリの最大サイズ。それ以外の場合は無視されます。(例: 83886080、 81920k、または 80m) |
いいえ; デフォルトは標準の JVM メモリ設定、fork が noの場合は無視されます。 |
| failonerror | コンパイルエラーが発生した場合にビルドを失敗させるかどうかを示します。 | いいえ; デフォルトは trueです。 |
| errorProperty | コンパイルが失敗した場合に trueに設定するプロパティ。Ant 1.7.1 以降。 |
いいえ |
| source | -source コマンドラインスイッチで指定されている、コンパイラが受け入れる Java 言語機能。有効な機能バージョンは、1.3、 1.4、 1.5、または 5などです。この属性は、 javac1.4(または Ant が JVM 1.3 で実行されていない場合は modern)、 gcj、 jikesより前のすべての実装で無視されます。 この属性を gcjまたは jikesと一緒に使用する場合は、使用しているバージョンが -source スイッチ(gcj の場合は -fsource)をサポートしていることを確認する必要があります。 |
いいえ。デフォルトでは、特別な ant.build.javac.source プロパティが設定されていない限り、-source 引数はまったく使用されません。デフォルト値は、Ant を実行している JDK によって異なります。この属性は常に指定することを強くお勧めします。 |
| target | 特定の JVM バージョン用のクラスファイルを生成します(クロスコンパイル)。 | いいえ。デフォルトでは、特別な ant.build.javac.target プロパティが設定されていない限り、-target 引数はまったく使用されません。デフォルト値は、Ant を実行している JDK と source によって異なります(クロスコンパイルオプション を参照)。この属性は常に指定することを強くお勧めします。 |
| compiler | 使用するコンパイラの実装。上記の有効なコンパイラのリストを参照してください。 | いいえ。設定されている場合は build.compiler プロパティの値に、そうでない場合は現在の JDK のデフォルトコンパイラにデフォルト設定されます。 |
| listfiles | コンパイルされるソースファイルがリストされるかどうかを示します。 | いいえ; デフォルトは noです。 |
| tempdir | Ant が一時ファイルを配置する場所。これは、タスクがフォークされ、コマンドライン引数の長さが 4KB を超える場合にのみ使用されます。Ant 1.6 以降。 | いいえ。デフォルトは java.io.tmpdir です。 |
| updatedProperty | コンパイルが実行され、成功した場合に trueに設定されるプロパティ。Ant 1.7.1 以降。 |
いいえ |
| includeDestClasses | この属性は、コンパイラに指定されたクラスパスに宛先クラスディレクトリを含めるかどうかを制御します。true(デフォルト)に設定すると、以前にコンパイルされたクラスがコンパイラのクラスパスに含まれます。これは、「貪欲な」コンパイラが既にコンパイルされている依存クラスを再コンパイルしないことを意味します。一般に、これはコンパイラが不要な作業を行うのを防ぐため、良いことです。ただし、ジェネリックスを含む一部のエッジケースでは、javac コンパイラはジェネリックス情報を取得するために依存クラスをコンパイルする必要があります。1つの例は、バグレポートに記載されています:Bug 40776 - ジェネリックスを使用した Java 5 プロジェクトのコンパイルに関する問題。属性を falseに設定すると、コンパイラは依存クラスを再コンパイルします。Ant 1.7.1 以降。 |
いいえ。デフォルトは trueです。 |
| createMissingPackageInfoClass | package-info.java ファイルの一部の package レベルのアノテーションは、package-info.class ファイルを作成しないため、Ant は毎回同じファイルを再コンパイルします。 Ant 1.8 以降、コンパイラによって作成されていない場合は、各 package-info.java に対して空の package-info.class が作成されます。 一部の設定では、この追加のクラスが問題を引き起こし、この属性を falseに設定することで抑制できます。Ant 1.8.3 以降。 |
いいえ。デフォルトは trueです。 |
| modulepath | アプリケーションモジュールを見つける場所を指定します。モジュールのディレクトリ、モジュールファイル、または展開されたモジュールのリスト。Ant 1.9.7 以降 | いいえ |
| modulepathref | 使用する modulepath。他の場所で定義されたパスへの参照として指定します。Ant 1.9.7 以降 | いいえ |
| modulesourcepath | 複数モジュールコンパイルの入力ソースファイルを見つける場所を指定します。Ant 1.9.7 以降 | srcdir 属性またはネストされた <src> 要素が存在しない場合、はい。 |
| modulesourcepathref | 使用する modulesourcepath。他の場所で定義されたパスへの参照として指定します。Ant 1.9.7 以降 | いいえ |
| upgrademodulepath | ランタイムイメージでアップグレード可能なモジュールを置き換えるモジュールの場所を指定します。Ant 1.9.7 以降 | いいえ |
| upgrademodulepathref | 使用する upgrademodulepath。他の場所で定義されたパスへの参照として指定します。 Ant 1.9.7 以降 | いいえ |
| nativeheaderdir | 生成されたネイティブヘッダーファイルを配置する場所を指定します。Ant 1.9.8 以降。 | いいえ。JDK 7 以前でコンパイルする場合は無視されます。 |
| release | --release スイッチの値を指定します。 設定されていて JDK 9+ で実行されている場合、source 属性と target 属性、および bootclasspath は無視されます。Ant 1.9.8 以降。 | いいえ。JDK 8 以前でコンパイルする場合は無視されます。 |
このタスクは暗黙的な FileSet を形成し、<fileset> のほとんどの属性(dir は srcdir になります)と、ネストされた <include>、<exclude>、および <patternset> 要素をサポートします。
srcdir、classpath、sourcepath、bootclasspath、modulepath、modulesourcepath、upgrademodulepath、および extdirs<javac> の srcdir、classpath、sourcepath、bootclasspath、extdirs、modulepath、modulesourcepath、および upgrademodulepath 属性は、パスのような構造 であり、ネストされた <src>(名前が異なります!)、<classpath>、<sourcepath>、<bootclasspath>、<extdirs>、<modulepath>、<modulesourcepath>、および <upgrademodulepath> 要素を介してそれぞれ設定することもできます。
ネストされた <compilerarg> 要素を使用して、コンパイラに追加のコマンドライン引数を指定できます。これらの要素は、コマンドライン引数のように指定されますが、指定されたコンパイラ実装が使用される場合にのみ引数を有効にするために使用できる追加の属性があります。
| 属性 | 説明 | 必須 |
|---|---|---|
| value | コマンドライン引数を参照してください。 | これらのうち正確に1つ |
| line | ||
| file | ||
| path | ||
| prefix | コマンドライン引数を参照してください。Ant 1.8 以降。 | いいえ |
| suffix | いいえ | |
| compiler | 選択したコンパイラ実装がこの属性の値と一致する場合にのみ、指定された引数を渡します。有効な値は、上記の有効なコンパイラのリストと同じです。) | いいえ |
Ant 1.8.0 以降
カスタムクラスが指定されている場合にコンパイラ実装をロードするときに使用するクラスパスを保持するパスのような構造。組み込みコンパイラのいずれかを使用する場合、効果はありません。
CompilerAdapter を実装するタイプのネストされた要素Ant 1.8.0 以降
定義された型が CompilerAdapter インターフェースを実装する場合、その型のネストされた要素を compiler 属性の代わりに使用できます。
${src} ディレクトリ以下のすべての .java ファイルをコンパイルし、.class ファイルを ${build} ディレクトリに保存します。使用されるクラスパスには xyz.jar が含まれ、デバッグ情報付きでコンパイルされます。ソースレベルは 1.4
なので、assert ステートメントを使用できます。
<javac srcdir="${src}"
destdir="${build}"
classpath="xyz.jar"
debug="on"
source="1.4"/>
${src} ディレクトリ以下のすべての .java ファイルをコンパイルし、.class ファイルを ${build} ディレクトリに保存します。Java コンパイラは、デフォルトの javac 実行ファイルを使用してフォークされます。ソースレベルは 1.2
(1.1
または 1.3
と同様)であり、クラスファイルは JDK 1.2+ でも実行できる必要があります。
<javac srcdir="${src}"
destdir="${build}"
fork="true"
source="1.2"
target="1.2"/>
${src} ディレクトリ以下のすべての .java ファイルをコンパイルし、.class ファイルを ${build} ディレクトリに保存します。Java コンパイラは、java$javac.exe という名前の実行ファイルを使用してフォークされます。$
記号は、2 番目の記号でエスケープする必要があることに注意してください。ソースレベルは 1.5
なので、ジェネリックスを使用できます。
<javac srcdir="${src}"
destdir="${build}"
fork="java$$javac.exe"
source="1.5"/>
${src} ディレクトリ以下の .java ファイルをコンパイルし、.class ファイルを ${build} ディレクトリに保存します。使用されるクラスパスには xyz.jar が含まれ、デバッグ情報はオンです。mypackage/p1 および mypackage/p2 以下のファイルのみが使用されます。mypackage/p1/testpackage ディレクトリ以下のすべてのファイルはコンパイルから除外されます。ソースレベルまたはターゲットレベルを指定していないため、使用される実際の値は、Ant を実行した JDK によって異なります。
<javac srcdir="${src}"
destdir="${build}"
includes="mypackage/p1/**,mypackage/p2/**"
excludes="mypackage/p1/testpackage/**"
classpath="xyz.jar"
debug="on"/>
これは前の例と同じですが、プロパティ src2 で定義された 2 番目のソースパスが追加されています。これは、ネストされた <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 に指示して、正しいコマンドラインスイッチを選択できるようにする必要があります。次の例では、新しいプロセスで JDK 1.1 javac を実行し、Ant が異なるバージョンの JVM で実行されている場合でも正しいコマンドラインスイッチを使用します。
<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 ソースファイルをコンパイルしますが、例はスキップします。コンパイラは、例以外のファイルの一部がそれらを参照している場合でもエラーを生成します。
特別な JDK(Ant が現在使用している JDK 以外)でコンパイルする場合は、executable 属性と fork 属性を設定します。taskname を使用すると、ログにこれらの設定が修正されていることが示される場合があります。
<javac srcdir=""
destdir=""
executable="path-to-java14-home/bin/javac"
fork="true"
taskname="javac1.4"/>
lint などの他のコンパイラオプションをアクティブにする場合は、<compilerarg> 要素を使用できます。
<javac srcdir="${src.dir}"
destdir="${classes.dir}"
classpathref="libraries">
<compilerarg value="-Xlint"/>
</javac>
カスタム CompilerAdapter org.example.MyAdapter を使用する場合は、compiler 属性を使用できます。
<javac srcdir="${src.dir}"
destdir="${classes.dir}"
compiler="org.example.MyAdapter"/>
または、次のように型を定義してタスクにネストします。
<componentdef classname="org.example.MyAdapter"
name="myadapter"/>
<javac srcdir="${src.dir}"
destdir="${classes.dir}">
<myadapter/>
</javac>
この場合、コンパイラアダプターは独自の属性とネストされた要素をサポートできます。
次の例は、Java 9+ モジュールの使用方法を示しています。
${src} ディレクトリ以下の単一モジュール内のすべての .java ファイルをコンパイルし、.class ファイルを ${build} ディレクトリに保存します。コンパイルでは、modules フォルダーにあるアプリケーションモジュールが使用されます。ソースレベルは、モジュールを有効にするために 9
です。
<javac srcdir="${src}"
destdir="${build}"
includeantruntime="false"
modulepath="modules"
source="9"/>
${src} ディレクトリ以下のすべてのソースモジュールで、gen/classes、lin32/classes、および lin64/classes 内のすべての .java ファイルをコンパイルします。${build} ディレクトリにモジュールディレクトリを生成します。${build} ディレクトリ以下の各生成されたモジュールディレクトリには、対応するソースモジュールからの .class ファイルが含まれています。* は、コンパイルモジュールセット内のいずれかのモジュールの名前を表すトークンです。{ ... , ... } は、展開の選択肢を表します。コンパイルでは、modules フォルダーにあるアプリケーションモジュールが使用されます。ソースレベルは、モジュールを有効にするために 9
です。
<javac modulesourcepath="${src}/*/{gen,lin{32,64}}/classes"
destdir="${build}"
includeantruntime="false"
modulepath="modules"
source="9"/>
Jikes 1.15 以上が必要です。
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 |
Jvc
は、<javac> を呼び出す前にプロパティ build.compiler.jvc.extensions を false
に設定しない限り、Microsoft 拡張機能を有効にします。
Sun の javac コンパイラには、-bootclasspath コマンドラインオプションがあります。これは、<javac> タスクの bootclasspath 属性/要素に対応します。Sun のコンパイラでは、-X 属性と -J-X 属性を使用して、ブートクラスパスをより詳細に制御することもできます。これらは <compilerarg> を使用して設定できます。*Ant 1.6.0 以降*、パス参照を OS に依存しない方法で使用できる文字列に変換するためのショートカットがあります(pathshortcut を参照)。例えば
<path id="lib.path.ref">
<fileset dir="lib" includes="*.jar"/>
</path>
<javac srcdir="src" destdir="classes">
<compilerarg arg="-Xbootclasspath/p:${toString:lib.path.ref}"/>
</javac>
OpenJDK プロジェクトは、javac コンパイラ をオープンソースプロジェクトとして提供しています。このプロジェクトの出力は、javac コンパイラを含む javac.jar です。このコンパイラは、-Xbootclasspath/p Java 引数を使用して <javac> タスクで使用できます。この引数は javac 実行ファイルのランタイムシステムに渡す必要があるため、-J を前に付ける必要があります。例えば
<property name="patched.javac.jar"
location="${my.patched.compiler}/dist/lib/javac.jar"/>
<presetdef name="patched.javac">
<javac fork="yes">
<compilerarg value="-J-Xbootclasspath/p:${patched.javac.jar}"/>
</javac>
</presetdef>
<patched.javac srcdir="src/java" destdir="build/classes"
debug="yes"/>
package-info.java ファイルは、パッケージレベルのアノテーションを許可するために Java 5 で導入されました。コンパイル時に、.java ファイルに実行時アノテーションが含まれていない場合、対応する .class ファイルは作成されません。Ant 1.7.1 より前では、<javac> タスクが再度実行されると、タスクは package-info.java ファイルを再度コンパイルしようとします。
Ant 1.7.1 では、通常は .class ファイルを含むディレクトリのタイムスタンプを含む、異なる種類のロジックが導入されました。このロジックは、特定の設定で Ant が package-info.java を再コンパイルしないことにつながることが判明しました。
*Ant 1.8.0 以降*、Ant が package-info.java をコンパイルし、コンパイラ自体によって package-info.class ファイルが作成されていない場合、「空の」package-info.class ファイルが作成されます。