S-JIS[2007-02-19/2008-06-21] 変更履歴

Ant:javac

javaのコンパイルを行うコアタスク。
(org.apache.tools.ant.taskdefs.Javac extends MatchingTask

最新javac


属性

属性 説明 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" /> その他のコンパイルオプション -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]

		<javacmemoryInitialSize="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>

Ant目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま