Compiles a Java source tree.


The source and destination directory will be recursively scanned for Java source files to compile. Only Java files that have no corresponding .class file or where the class file is older than the .java file will be compiled.

Javaソースファイルをコンパイルするために、 コンパイル元とコンパイル先のディレクトリを再帰的に走査します。 Javaファイルは、対応する.classファイルが存在しないか、 .javaファイルよりもクラスファイルが古い場合にのみ、 コンパイルされます。

Note: Ant uses only the names of the source and class files to find the classes that need a rebuild. It will not scan the source and therefore will have no knowledge about nested classes, classes that are named different from the source file, and so on. See the <depend> task for dependency checking based on other than just existence/modification times.

Note: Antは、リビルドが必要なクラスを見つけるために、 ソースとクラスのファイル名だけを使用します。 ネストクラスに関しては、ソースファイルとクラスファイルの名前が異なり、 ソースが検索されません。 存在/更新時間だけでない、他の方法による依存性の検査をするには、 <depend> タスクを見てください。

When the source files are part of a package, the directory structure of the source tree should follow the package hierarchy.

ソースファイルがパッケージの一部のときは、 ソースツリーのディレクトリ構造は、パッケージ階層に従っていなければいけません。

It is possible to refine the set of files that are being compiled. This can be done with the includes, includesfile, excludes, and excludesfile attributes. With the includes or includesfile attribute, you specify the files you want to have included. The exclude or excludesfile attribute is used to specify the files you want to have excluded. In both cases, the list of files can be specified by either the filename, relative to the directory(s) specified in the srcdir attribute or nested <src> element(s), or by using wildcard patterns. See the section on directory-based tasks, for information on how the inclusion/exclusion of files works, and how to write wildcard patterns.

コンパイルされるファイルの集合を絞り込むことができます。 これにはincludesincludesfileexcludesexcludesfile属性を使用することができます。 includesやincludesfile属性を使って、取り込みたいファイルを指定します。 excludeやexcludesfile属性は、除外したいファイルを指定するために使用します。 両方のケースで、ファイル名か関連するディレクトリ(複数)を使って、 ファイルのリストを指定できます。 srcdir属性、ネストした<src>要素(複数)、 ワイルドカードを含むパターンを使います。 ファイルの包含/排他の処理方法や、ワイルドカードパターンの記述方法については ディレクトリベースのタスク の章を見てください。

It is possible to use different compilers. This can be specified by either setting the global build.compiler property, which will affect all <javac> tasks throughout the build, or by setting the compiler attribute, specific to the current <javac> task. Valid values for either the build.compiler property or the compiler attribute are:

異なるコンパイラを使用できます。 これは、build.compilerプロパティーで指定でき、 ビルドを通して、すべての<javac>タスクに影響します。 またはcompiler属性を使うと、 現在の<javac>タスクに対して指定できます。 build.compilerプロパティーとcompiler属性 に有効な値は次のものです:

The default is javac1.x with x depending on the JDK version you use while you are running Ant. If you wish to use a different compiler interface than those supplied, you can write a class that implements the CompilerAdapter interface (package Supply the full classname in the build.compiler property or the compiler attribute.

デフォルトはjavac1.xで、xは Antを実行するときに使用したJDKのバージョンに依存します。 これらの提供されたコンパイラの他に、 異なるコンパイラのインターフェイスを使いたい場合は、 CompilerAdapterインターフェイス(パッケージ) を実装したクラスを書くことができます。 build.compilerプロパティーかcompiler属性に 完全クラス名を指定してください。

The fork attribute overrides the build.compiler property or compiler attribute setting and expects a JDK1.1 or higher to be set in JAVA_HOME.

fork属性はbuild.compilerプロパティーや compiler属性の指定を上書きし、 JAVA_HOMEで指定されたJDK1.1以降のコンパイラが期待されています。

You can also use the compiler attribute to tell Ant which JDK version it shall assume when it puts together the command line switches - even if you set fork="true". This is useful if you want to run the compiler of JDK 1.1 while you current JDK is 1.2+. If you use compiler="javac1.1" and (for example) depend="true" Ant will use the command line switch -depend instead of -Xdepend.

compiler属性を使うことで、 コマンドラインスイッチを使いたいときに、 AntにどのJDKのバージョンを使うかを伝えることができます。 fork="true"を指定した場合でも適用されます。 これは、JDK1.2+を使っていて、JDK1.1を実行したいときに便利です。 compiler="javac1.1"と (例えば)depend="true"を指定したとき、 Antは-Xdependの代わりに -dependのコマンドラインスイッチを使用します。

This task will drop all entries that point to non-existent files/directories from the classpath it passes to the compiler.

このタスクはコンパイラに渡すクラスパスから、存在しない ファイルやディレクトリへのすべてのエントリーを省きます。

Windows Note:When the modern compiler is used in unforked mode on Windows, it locks up the files present in the classpath of the <javac> task, and does not release them. The side effect of this is that you will not be able to delete or move those files later on in the build. The workaround is to fork when invoking the compiler.

Windows Note: Windows上でforkなしのモードで、modernコンパイラが使われている場合、 <javac>タスクのクラスパス中の 存在するファイルをロックし、これらを開放しません。 この副作用として、ビルド中は これらのファイルを削除、移動することができません。 これの対処は、コンパイラを実行するときにforkすることです。


Attribute Description Required
srcdir Location of the java files. (See the Note below.) Yes, unless nested <src> elements are present.
destdir Location to store the class files. No
includes Comma- or space-separated list of files (may be specified using wildcard patterns) that must be included; all .java files are included when omitted. No
includesfile The name of a file that contains a list of files to include (may be specified using wildcard patterns). No
excludes Comma- or space-separated list of files (may be specified using wildcard patterns) that must be excluded; no files (except default excludes) are excluded when omitted. No
excludesfile The name of a file that contains a list of files to exclude (may be specified using wildcard patterns). No
classpath The classpath to use. No
sourcepath The sourcepath to use; defaults to the value of the srcdir attribute (or nested <src> elements). To suppress the sourcepath switch, use sourcepath="". No
bootclasspath Location of bootstrap class files. No
classpathref The classpath to use, given as a reference to a path defined elsewhere. No
sourcepathref The sourcepath to use, given as a reference to a path defined elsewhere. No
bootclasspathref Location of bootstrap class files, given as a reference to a path defined elsewhere. No
extdirs Location of installed extensions. No
encoding Encoding of source files. (Note: gcj doesn't support this option yet.) No
nowarn Indicates whether the -nowarn switch should be passed to the compiler; defaults to off. No
debug Indicates whether source should be compiled with debug information; defaults to off. No
debuglevel Keyword list to be appended to the -g command-line switch. This will be ignored by all implementations except modern and classic(ver >= 1.2). Legal values are none or a comma-separated list of the following keywords: lines, vars, and source. If debuglevel is not specified, by default, :none will be appended to -g. If debug is not turned on, this attribute will be ignored. No
optimize Indicates whether source should be compiled with optimization; defaults to off. No
deprecation Indicates whether source should be compiled with deprecation information; defaults to off. No
target Generate class files for specific VM version (e.g., 1.1 or 1.2). Note that the default value depends on the JVM that is running Ant. In particular, if you use JDK 1.4 the generated classes will not be usable for a 1.1 Java VM unless you explicitly set this attribute to the value 1.1 (which is the default value for JDK 1.1 to 1.3). No
verbose Asks the compiler for verbose output. No
depend Enables dependency-tracking for compilers that support this (jikes and classic). No
includeAntRuntime Whether to include the Ant run-time libraries in the classpath; defaults to yes. No
includeJavaRuntime Whether to include the default run-time libraries from the executing VM in the classpath; defaults to yes. No
fork Whether to execute javac using the JDK compiler externally; defaults to no. No
executable Complete path to the javac executable to use in case of fork="yes". Defaults to the compiler of the Java version that is currently running Ant. Ignored if fork="no" No
memoryInitialSize The initial size of the memory for the underlying VM, if javac is run externally; ignored otherwise. Defaults to the standard VM memory setting. (Examples: 83886080, 81920k, or 80m) No
memoryMaximumSize The maximum size of the memory for the underlying VM, if javac is run externally; ignored otherwise. Defaults to the standard VM memory setting. (Examples: 83886080, 81920k, or 80m) No
failonerror Indicates whether the build will continue even if there are compilation errors; defaults to true. No
source Value of the -source command-line switch; will be ignored by all implementations except javac1.4 (or modern when Ant is not running in a 1.3 VM) and jikes.
If you use this attribute together with jikes, you must make sure that your version of jikes supports the -source switch.
Legal values are 1.3 and 1.4 – by default, no -source argument will be used at all.
compiler The compiler implementation to use. If this attribute is not set, the value of the build.compiler property, if set, will be used. Otherwise, the default compiler for the current VM will be used. (See the above list of valid compilers.) No
listfiles Indicates whether the source files to be compiled will be listed; defaults to no. No


属性 説明 必須
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です。 No
debuglevel -gコマンドラインスイッチに追加する キーワードのリスト。 modernclassic(ver >= 1.2) 以外の実装では、無視されます。 正式な値はnoneか、カンマで区切られた次のキーワードのリストです。 linesvarssourcedebuglevelが指定されなかった場合は、 デフォルトで:none-gに付加されます。 debugが有効でない場合は、この属性は無視されます。 No
optimize 最適化オプションを付けてコンパイルするかどうか を指定します。デフォルトはoffです。 No
deprecation deprecation情報をつけてコンパイルするかどうか を指定します。デフォルトはoffです。 No
target 指定したVMのバージョンに対して、クラスファイルを生成します (例、1.11.2)。 デフォルトの値はAntを実行しているJVMに依存することに注意してください。 特に、JDK1.4を使う場合、生成されたクラスは、 この属性を1.1の値にしないかぎり、1.1のjava VMで使用できません。 (JDK1.1をデフォルトで利用できるのは1.3までです) No
verbose コンパイラに冗長な出力をさせます No
depend 依存性の追跡をサポートしているコンパイラ (jikesclassic)で、 それを有効にします。 No
includeAntRuntime Antランタイムライブラリをクラスパスに含めるかどうか。 デフォルトはyesです。 No
includeJavaRuntime 実行するVMのデフォルトのランタイムライブラリを クラスパスに含めるかどうか。 デフォルトはyesです。 No
fork 外部のJDKコンパイラを使ってjavacを 実行するかどうか。 デフォルトはnoです。 No
executable executableはfork="yes"の場合に 使用されます。 デフォルトは現在Antを実行しているJavaのバージョンのコンパイラです。 fork="no"のときは無視されます。 No
memoryInitialSize 基本的なVMに割り当てるメモリの初期サイズ。 javacが外部で実行された場合以外は無視されます。 デフォルトは標準のVMのメモリ設定です (例:8388608081920k80m) No
memoryMaximumSize 基本的なVMに割り当てるメモリの最大サイズ。 javacが外部で実行された場合以外は無視されます。 デフォルトは標準のVMのメモリ設定です (例:8388608081920k80m) No
failonerror コンパイルが失敗したときに、ビルドを続けるかどうかを指定します。 デフォルトはtrueです。 No
source -sourceコマンドラインスイッチの値です。 javac1.4 (あるいはAntを1.3のVMで実行していないときのmodern) やjikesを除いた実装では、無視されます。
jikesでこの属性を使う場合は、 -sourceスイッチをサポートするjikesのバージョンで なければなりません。
正式な値は1.31.4で、 デフォルトでは-source属性は使われません。
compiler 使用するコンパイラの実装。 この属性が指定されない場合、build.compilerプロパティー の値が指定されていれば、それが使われます。 それ以外の場合は、現在のVMのデフォルトのコンパイラが使われます (上の有効なコンパイラのリストを見てください)。 No
listfiles コンパイルしたソースファイルをリスト表示するかどうか。 デフォルトはnoです。 No

Parameters specified as nested elements


This task forms an implicit FileSet and supports all attributes of <fileset> (dir becomes srcdir) as well as the nested <include>, <exclude> and <patternset> elements.

このタスクは暗黙のファイルセットを持っていて、 ネストした<include><exclude><patternset>要素 と同様に、 <fileset>の属性(dirsrcdirになります) のすべてをサポートします。

src, classpath, sourcepath, bootclasspath and extdirs

<javac>'s srcdir, classpath, sourcepath, bootclasspath, and extdirs attributes are path-like structures and can also be set via nested <src>, <classpath>, <sourcepath>, <bootclasspath> and <extdirs> elements, respectively.

<javac>srcdirclasspathsourcepathbootclasspathextdirs属性は パス類似構造であり、 それぞれネストした <src><classpath><sourcepath><bootclasspath><extdirs>要素によって指定することができます。


You can specify additional command line arguments for the compiler with nested <compilerarg> elements. These elements are specified like Command-line Arguments but have an additional attribute that can be used to enable arguments only if a given compiler implementation will be used.

ネストした<compilerarg>要素で、 コンパイラに対して追加のコマンドライン引数を指定することができます。 これらの要素はコマンドライン引数のように指定できますが、 有効な引数として使えるのは追加する属性が、与えられたコンパイラの実装で 使われている場合のみです。

Attribute Description Required
value See Command-line Arguments. Exactly one of these.
compiler Only pass the specified argument if the chosen compiler implementation matches the value of this attribute. Legal values are the same as those in the above list of valid compilers.) No
属性 説明 必須
value コマンドライン引数を参照 必ずこのうちの1つ
compiler 選択されたコンパイラ実装が、この属性の値と合う場合のみ、 指定した引数が渡されます。 正式な値は、上の有効なコンパイラのリスト と同じものです。) No


  <javac srcdir="${src}"

compiles all .java files under the ${src} directory, and stores the .class files in the ${build} directory. The classpath used includes xyz.jar, and compiling with debug information is on.

${src}ディレクトリ以下のすべての.javaファイル をコンパイルし、.classファイルを${build}ディレクトリに保存します。 使用するクラスパスはxyz.jarを含み、 デバッグ情報をonにしてコンパイルします。

  <javac srcdir="${src}"

compiles all .java files under the ${src} directory, and stores the .class files in the ${build} directory. This will fork off the javac compiler using the default javac executable.

${src}ディレクトリ以下のすべての.javaファイル をコンパイルし、.classファイルを${build}ディレクトリに保存します。 これは、デフォルトのjavac実行を使って、 javacコンパイルをフォークします。

  <javac srcdir="${src}"

compiles all .java files under the ${src} directory, and stores the .class files in the ${build} directory. This will fork off the javac compiler, using the executable named java$javac.exe. Note that the $ sign needs to be escaped by a second one.

${src}ディレクトリ以下のすべての.javaファイル をコンパイルし、.classファイルを${build}ディレクトリに保存します。 これは、java$javac.exeという名前の実行ファイルを使って、 javacコンパイラをフォークします。 $記号が2つめの$でエスケープされることに注意してください。

  <javac srcdir="${src}"

compiles .java files under the ${src} directory, and stores the .class files in the ${build} directory. The classpath used includes xyz.jar, and debug information is on. Only files under mypackage/p1 and mypackage/p2 are used. All files in and below the mypackage/p1/testpackage directory are excluded from compilation.

${src}ディレクトリ以下のすべての.javaファイル をコンパイルし、.classファイルを${build}ディレクトリに保存します。 使用するクラスパスはxyz.jarを含み、デバッグ情報がonになっています。 mypackage/p1mypackage/p2以下のファイルだけが使用されます。 mypackage/p1/testpackageディレクトリ内およびその下のファイルは、 コンパイルから除外されます。

  <javac srcdir="${src}:${src2}"

is the same as the previous example, with the addition of a second source path, defined by the property src2. This can also be represented using nested <src> elements as follows:

これは、前のサンプルと同じですが、プロパティsrc2で定義される二番目のソースパスが追加されています。 これは、次のようなネストした<src>要素を使用しても記述できます。

  <javac destdir="${build}"
    <src path="${src}"/>
    <src path="${src2}"/>
    <include name="mypackage/p1/**"/>
    <include name="mypackage/p2/**"/>
    <exclude name="mypackage/p1/testpackage/**"/>

If you want to run the javac compiler of a different JDK, you should tell Ant, where to find the compiler and which version of JDK you will be using so it can choose the correct command line switches. The following example executes a JDK 1.1 javac in a new process and uses the correct command line switches even when Ant is running in a Java VM of a different version:

異なるJDKのjavacコンパイラを実行したい場合、 コンパイラを探す場所、使用するJDKのバージョンを、 正しいコマンドラインスイッチを選択して、 Antに伝えなければなりません。 次の例は新しいプロセスでJDK1.1のjavacを実行します。 Antが異なるバージョンのJava VMで実行されても、 正しいコマンドラインスイッチが使われます。

  <javac srcdir="${src}"

Note: If you wish to compile only source files located in certain packages below a common root, use the include/exclude attributes or <include>/<exclude> nested elements to filter for these packages. Do not include part of your package structure in the srcdir attribute (or nested <src> elements), or Ant will recompile your source files every time you run your compile target. See the Ant FAQ for additional information.

Note: 普通にルート以下のあるパッケージのソースファイルだけをコンパイルしたい場合、 パッケージをフィルターするために include/exclude属性や <include>/<exclude>のネストされた要素 を使ってください。 srcdir属性(あるいはネストした<src>要素)で、 パッケージ構造の一部を含めないでください。 Antはコンパイルのターゲットを実行する度にソースファイルをリコンパイルします。 追加情報はAnt FAQ を参照してください。

Note: If you are using Ant on Windows and a new DOS window pops up for every use of an external compiler, this may be a problem of the JDK you are using. This problem may occur with all JDKs < 1.2.

Note: Windows上でAntを使用する場合には、外部コンパイラを使用するたびに新しいDOSのウィンドウがポップアップしますが、 これはあなたが使用しているJDKの問題だと思われます。 この問題は、JDK< 1.2のすべてのJDKで発生する可能性があります。

Jikes Notes

Jikes supports some extra options, which can be set be defining the properties shown below prior to invoking the task. The setting for each property will be in affect for all <javac> tasks throughout the build. The Ant developers are aware that this is ugly and inflexible – expect a better solution in the future. All the options are boolean, and must be set to true or yes to be interpreted as anything other than false. By default, build.compiler.warnings is true, while all others are false.

Jikes は、 タスクを呼び出す前に、以下に示すようなプロパティーを設定することで、 いくつかの拡張オプションをサポートします。 各プロパティーの設定は、ビルドを通して、 すべての<javac>タスクに影響を与えます。 Antの開発者は、これは醜く融通の利かないことだと気づきます。 – 将来はもっとよい方法が期待されています。 すべてのオプションはbooleanで、falseの他に解釈されるには、 trueyesを設定しなければなりません。 デフォルトでは、build.compiler.warningstrueで、 他のすべてのプロパティーはfalseです。

Property Description Default
build.compiler.emacs Enable emacs-compatible error messages. false
build.compiler.fulldepend Enable full dependency checking; see
the +F switch in the Jikes manual.
build.compiler.pedantic Enable pedantic warnings. false
Deprecated. Use <javac>'s nowarn attribute instead.
Don't disable warning messages. true
プロパティー 説明 デフォルト
build.compiler.emacs emacs互換のエラーメッセージを有効にします。 false
build.compiler.fulldepend 完全な依存性検査を有効にします。Jikesのマニュアルの +Fスイッチを参照してください。 false
build.compiler.pedantic 詳細な警告を有効にします。 false
推奨されません。 代わりに<javac>nowarn属性を使ってください。
警告メッセージを無効にしません。 true

Copyright © 2000-2002 Apache Software Foundation. All rights Reserved.

[訳注:これは西野 亨、宮本信二が翻訳しました。日本語訳に対するコメントがあれば report@jajakarta.orgに送ってください]