javaのコンパイルを行うコアタスク。
(org.apache.tools.ant.taskdefs.Javac extends
MatchingTask)
属性 | 説明 | javacコマンドのオプション | 更新日 |
---|---|---|---|
destdir | コンパイル先のディレクトリ。 このディレクトリは存在してなければいけない。 |
-d ディレクトリ | |
source | 準拠するコンパイラーレベル。 | -source バージョン | |
encoding | ソースファイルのエンコーディング。 | -encoding エンコード | |
memoryInitialSize | 初期ヒープサイズ。指定する際はforkをtrueにする必要がある。 | -Xmsサイズ | 2008-06-21 |
memoryMaximumSize | 最大ヒープサイズ。指定する際はforkをtrueにする必要がある。 | -Xmxサイズ | 2008-06-21 |
fork | コンパイラーを別プロセスで起動するかどうか。 | 2008-06-21 |
タグ(使用例) | 説明 | javacのオプション |
---|---|---|
<src path="../src"
/> |
javaファイルの存在しているディレクトリ。 複数のディレクトリをコンパイル対象としたい場合、srcタグを複数入れればよい。 |
|
<include name="**/*.java"
/> |
コンパイル対象ファイル。 javaファイルはデフォルトで入るので、通常はこの指定は要らない。 |
|
<exclude name="**/*Test.java"/> |
コンパイルから除外するファイル。 | |
<classpath refid="classpath" /> |
クラスパスの指定。 | -classpath |
<compilerarg value= |
その他のコンパイルオプション。 | -Xlint:unchecked |
build.xml:
<?xml version="1.0" encoding="Shift_JIS"?> <project name="compile_sample" default="compile" basedir="."> <property name="src" location="../src" /> <property name="test" location="../test" /> <property name="classes" location="../class" /> <target name="compile"> <mkdir dir="${classes}" /> <javac destdir="${classes}" source="1.4" encoding="MS932"> <compilerarg value="-Xlint:unchecked" /> <src path="${src}" /> <src path="${test}" /> <include name="**/*.java" /> <exclude name="**/*Test.java"/> </javac> </target> </project>
コンパイル中にOutOfMemoryErrorで落ちる場合は、ヒープサイズを増やしてみる。[2008-06-21]
<javac 〜 memoryInitialSize="512m" memoryMaximumSize="512m" fork="true">
ヒープを増やしても解決しないようなら、分割コンパイルした方がいいかもしれない。
コンパイラーは、依存しているクラス(使用しているクラス)があると、先にそちらをコンパイルする。(classファイルとソースファイルのタイムスタンプを見比べて、ソースが新しければコンパイルする)
自分自身を保留しつつ他のクラスをコンパイルすることになるので、保留しているのを記憶する分だけメモリーが余計に必要になる。
なので、先に依存しているクラスだけをコンパイルするようにしてやれば、保留する分のメモリーが節約できることになり、OutOfMemoryErrorが起きにくくなる。
例えばsrc1を使っているsrc2をコンパイルするには、以下のようにタスクを書く。
<javac destdir="${classes}"> <src path="src1" /> <include name="**/*.java" /> </javac> <javac destdir="${classes}"> <src path="src2" /> <include name="**/*.java" /> </javac>