次のantタスクを使用して、クリーンなディレクトリ(インクリメンタルコンパイルなし)からさまざまなパッケージから100を超えるJavaクラスをコンパイルしようとしています。
<target name="-main-src-depend">
<depend srcdir="${src.dir}"
destdir="${bin.dir}"
cache="${cache.dir}"
closure="true"/>
</target>
<target name="compile" depends="-main-src-depend"
description="Compiles the project.">
<echo>Compiling</echo>
<javac target="${javac.target}"
source="${javac.source}"
debug="${javac.debug}"
srcdir="${src.dir}"
destdir="${bin.dir}">
<classpath>
<path refid="runtime.classpath"/>
<path refid="compile.classpath"/>
</classpath>
</javac>
</target>
ただし、コンパイルタスクを初めて実行すると、常にStackOverflowExceptionが発生します。タスクを再度実行すると、コンパイラーはインクリメンタルビルドを実行し、すべてが正常に機能します。CruiseControlを使用して自動デイリービルドを実行しているため、これは望ましくありません。これにより、誤ったビルドエラーが発生します。
迅速で汚い解決策として、私は2つの別々のタスクを作成し、それぞれでプロジェクトの一部をコンパイルしました。将来的にクラスが追加されるため、このソリューションが有効になるとは思いません。また、「コンパイル制限」に達するたびに新しいコンパイルタスクを追加したくありません。