1 .'" t
   2 ."
   3 ." Copyright 2000-2006 Sun Microsystems, Inc.  All Rights Reserved.
   4 ." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 ."
   6 ." This code is free software; you can redistribute it and/or modify it
   7 ." under the terms of the GNU General Public License version 2 only, as
   8 ." published by the Free Software Foundation.
   9 ."
  10 ." This code is distributed in the hope that it will be useful, but WITHOUT
  11 ." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 ." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13 ." version 2 for more details (a copy is included in the LICENSE file that
  14 ." accompanied this code).
  15 ."
  16 ." You should have received a copy of the GNU General Public License version
  17 ." 2 along with this work; if not, write to the Free Software Foundation,
  18 ." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19 ."
  20 ." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21 ." or visit www.oracle.com if you need additional information or have any
  22 ." questions.
  23 ." ` 
  24 .TH javac 1 "05 Jul 2012"
  25 ." Generated by html2man
  26 
  27 .LP
  28 .SH 名前
  29 javac \- Java プログラミング言語コンパイラ
  30 .LP
  31 .SH "形式"
  32 .LP
  33 
  34 .LP
  35 .nf
  36 \f3
  37 .fl
  38         \fP\f3javac\fP [ options ] [ sourcefiles ] [ classes ] [ @argfiles ]
  39 .fl
  40       
  41 .fl
  42 .fi
  43 
  44 .LP
  45 .LP
  46 引数は順不同です。
  47 .LP
  48 .RS 3
  49 
  50 .LP
  51 .RS 3
  52 .TP 3
  53 options 
  54 コマンド行オプション
  55 .TP 3
  56 sourcefiles 
  57 コンパイルされる 1 つ以上のソースファイル (MyClass.java など)
  58 .TP 3
  59 classes 
  60 注釈の処理対象となる 1 つ以上のクラス (MyPackage.MyClass など)。
  61 .TP 3
  62 @argfiles 
  63 オプションとソースファイルを列挙した 1 つ以上のファイル。このファイルの中では、\f2\-J\fP オプションは指定できません。
  64 .RE
  65 
  66 .LP
  67 .RE
  68 .SH "機能説明"
  69 .LP
  70 
  71 .LP
  72 .LP
  73 \f3javac\fP ツールは、Java プログラミング言語で記述されたクラスとインタフェースの定義を読み取り、バイトコードのクラスファイルにコンパイルします。また、Java ソースファイルおよびクラス内の注釈の処理も行います。
  74 .LP
  75 .LP
  76 ソースコードのファイル名を \f3javac\fP に渡すには、次の 2 つの方法があります。
  77 .LP
  78 .RS 3
  79 .TP 2
  80 o
  81 ソースファイルの数が少ない場合は、ファイル名をコマンド行で直接指定します。
  82 .TP 2
  83 o
  84 ソースファイルの数が多い場合は、ファイル名を空白または改行で区切って、1 つのファイルに列挙します。次に、このリストファイル名の先頭に \f3@\fP を付けて、\f3javac\fP のコマンド行で指定します。
  85 .RE
  86 
  87 .LP
  88 .LP
  89 ソースコードのファイル名は \f2.java\fP 拡張子を、クラスのファイル名は \f2.class\fP 拡張子を持っていなければなりません。また、ソースファイルとクラスファイルのどちらも、該当するクラスに対応するルート名を持っていなければなりません。たとえば、\f2MyClass\fP という名前のクラスは、\f2MyClass.class\fP という名前のソースファイルに記述します。このソースファイルは、MyClass.class という名前のバイトコードクラスファイルにコンパイルされます。
  90 .LP
  91 .LP
  92 内部クラスが定義されていると、追加のクラスファイルが生成されます。これらのクラスファイルの名前は、\f2MyClass$MyInnerClass.class\fP のように、外部クラス名と内部クラス名を組み合わせたものになります。
  93 .LP
  94 .LP
  95 ソースファイルは、パッケージツリーを反映したディレクトリツリーに配置する必要があります。たとえば、すべてのソースファイルを \f3/workspace\fP に置いている場合、\f2com.mysoft.mypack.MyClass\fP のソースコードは \f3/workspace/com/mysoft/mypack/MyClass.java\fP にある必要があります。
  96 .LP
  97 .LP
  98 デフォルトでは、コンパイラは、各クラスファイルを対応するソースファイルと同じディレクトリに置きます。別の出力先ディレクトリを指定するには、\f3\-d\fP を使用します (このあとの「オプション」を参照)。
  99 .LP
 100 .SH "オプション"
 101 .LP
 102 
 103 .LP
 104 .LP
 105 コンパイラには、現在の開発環境でサポートされており、将来のリリースでもサポートされる標準オプションのセットがあります。これ以外の非標準オプションは、現在の仮想マシンおよびコンパイラの実装に固有のオプションで、将来に変更される可能性があります。非標準オプションは、\f3\-X\fP で始まります。
 106 .LP
 107 .SS 
 108 標準オプション
 109 .LP
 110 .RS 3
 111 
 112 .LP
 113 .RS 3
 114 .TP 3
 115 \-Akey[=value] 
 116 注釈プロセッサに渡されるオプション。これらは、javac によって直接解釈されず、個々のプロセッサによって使用されます。\f2key\fP には、1 つまたは複数の識別子を「.」で区切ったものを指定してください。
 117 .TP 3
 118 \-cp path または \-classpath path 
 119 ユーザーのクラスファイルおよび (場合によっては) 注釈プロセッサやソースファイルの検索場所を指定します。このクラスパスは \f3CLASSPATH\fP 環境変数のユーザークラスパスをオーバーライドします。\f3CLASSPATH\fP、\f3\-cp\fP、\f3\-classpath\fP のいずれも指定されていない場合、ユーザークラスパスは、現在のディレクトリになります。詳細は、
 120 .na
 121 「\f2Setting the Class Path\fP」
 122 .fi
 123 (http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath) を参照してください。
 124 .LP
 125 \f3\-sourcepath\fP オプションが指定されていない場合は、ソースファイルもユーザークラスパスから検索されます。
 126 .LP
 127 \f3\-processorpath\fP オプションが指定されていない場合は、注釈プロセッサもクラスパス内で検索されます。
 128 .LP
 129 便宜上、\f2*\fP のベース名を含むクラスパス要素は、ディレクトリ内の拡張子 \f2.jar\fP または \f2.JAR\fP を持つすべてのファイルのリストを指定するのと同じであるとみなされます。
 130 .br
 131 .br
 132 たとえば、ディレクトリ \f2foo\fP に \f2a.jar\fP と \f2b.JAR\fP が含まれている場合、クラスパス要素 \f2foo/*\fP は \f2A.jar:b.JAR\fP に展開されます。ただし、JAR ファイルの順番は未定義となります。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべての JAR ファイルが含まれます。\f2*\fP だけから成るクラスパスエントリは、カレントディレクトリ内のすべての JAR ファイルのリストに展開されます。\f2CLASSPATH\fP 環境変数も、定義時には同様に展開されます。\f3注:\fP \ コマンド行環境の構成によっては、\f2javac \-cp "*.jar" MyClass.java\fP などのように、ワイルドカード文字を引用符で囲まなければならない場合があります。
 133 .TP 3
 134 \-Djava.ext.dirs=directories 
 135 インストール型拡張機能の位置をオーバーライドします。
 136 .TP 3
 137 \-Djava.endorsed.dirs=directories 
 138 承認された標準パスの位置をオーバーライドします。
 139 .TP 3
 140 \-d directory 
 141 クラスファイルの出力先ディレクトリを設定します。このディレクトリはあらかじめ用意されている必要があります。\f3javac\fP はディレクトリの作成を行いません。クラスがパッケージの一部である場合、\f3javac\fP は、必要に応じてディレクトリを作成し、パッケージ名を反映したサブディレクトリにクラスファイルを置きます。たとえば、\f3\-d /home/myclasses\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP である場合、クラスファイルは \f2/home/myclasses/com/mypackage/MyClass.class\fP になります。
 142 .LP
 143 \f3\-d\fP が指定されなかった場合、\f3javac\fP は各クラスファイルを、その生成元となるソースファイルと同じディレクトリ内に格納します。
 144 .LP
 145 \f3注:\fP \  \f3\-d\fP で指定したディレクトリはユーザークラスパスに自動的には追加されません。
 146 .TP 3
 147 \-deprecation 
 148 推奨されないメンバやクラスが、使用またはオーバーライドされるたびに説明を表示します。\f3\-deprecation\fP が指定されていない場合、\f3javac\fP は、推奨されないメンバやクラスを使用またはオーバーライドしているソースファイルの要約を表示します。\f3\-deprecation\fP は \f3\-Xlint:deprecation\fP の省略表記です。
 149 .TP 3
 150 \-encoding encoding 
 151 ソースファイルのエンコーディング名 (\f2EUC\-JP や UTF\-8\fP など) を指定します。\f3\-encoding\fP が指定されていない場合は、プラットフォームのデフォルトコンバータが使われます。
 152 .TP 3
 153 \-g 
 154 局所変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソースファイル情報だけが生成されます。
 155 .TP 3
 156 \-g:none 
 157 デバッグ情報を生成しません。
 158 .TP 3
 159 \-g:{keyword list} 
 160 コンマで区切られたキーワードリストにより指定された、特定の種類のデバッグ情報だけを生成します。次のキーワードが有効です。
 161 .RS 3
 162 .TP 3
 163 source 
 164 ソースファイルのデバッグ情報
 165 .TP 3
 166 lines 
 167 行番号のデバッグ情報
 168 .TP 3
 169 vars 
 170 局所変数のデバッグ情報
 171 .RE
 172 .TP 3
 173 \-help 
 174 標準オプションの形式を表示します。
 175 .TP 3
 176 \-implicit:{class,none} 
 177 暗黙的にロードされたソースファイルに対するクラスファイルの生成を制御します。クラスファイルを自動生成するには、\f3\-implicit:class\fP を使用します。クラスファイルの生成を抑制するには、\f3\-implicit:none\fP を使用します。このオプションが指定されなかった場合のデフォルト動作は、クラスファイルの自動生成になります。その場合、そのようなクラスファイルが生成された時に注釈処理も実行されると、コンパイラから警告が発行されます。このオプションが明示的に設定された場合には、警告は発行されません。「型の検索」を参照してください。
 178 .TP 3
 179 \-nowarn 
 180 警告メッセージを無効にします。これは \f3\-Xlint:none\fP と同じ意味です。
 181 .TP 3
 182 \-proc: {none,only} 
 183 注釈処理、コンパイル、その両方、のいずれを実行するかを制御します。\f3\-proc:none\fP は、注釈処理なしでコンパイルが実行されることを意味します。\f3\-proc:only\fP は、注釈処理だけが実行され、後続のコンパイルはまったく実行されないことを意味します。
 184 .TP 3
 185 \-processor class1[,class2,class3...] 
 186 実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。
 187 .TP 3
 188 \-processorpath path 
 189 注釈プロセッサの検索場所を指定します。このオプションを使用しなかった場合、クラスパス内でプロセッサの検索が行われます。
 190 .TP 3
 191 \-s dir 
 192 生成されたソースファイルの格納先となるディレクトリを指定します。そのディレクトリはすでに存在している必要があります。\f3javac\fP は作成しません。クラスがパッケージの一部になっていた場合、コンパイラはそのソースファイルを、パッケージ名を反映したサブディレクトリ内に格納します。その際、必要に応じてディレクトリを作成します。たとえば、ユーザーが \f3\-s /home/mysrc\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP であった場合、そのソースファイルは \f2/home/mysrc/com/mypackage/MyClass.java\fP 内に格納されます。
 193 .TP 3
 194 \-source release 
 195 受け付けるソースコードのバージョンを指定します。\f2release\fP には次の値を指定できます。
 196 .RS 3
 197 .TP 3
 198 1.3 
 199 このコンパイラでは、JDK 1.3 以降に導入されたアサーション、汎用機能、または他の言語機能をサポート\f2しません\fP。
 200 .TP 3
 201 1.4 
 202 JDK 1.4 で導入された、アサーションを含むコードを受け付けます。
 203 .TP 3
 204 1.5 
 205 JDK 5 で導入された汎用機能および他の言語機能を含んだコードを受け付けます。
 206 .TP 3
 207 5 
 208 1.5 と同義です。
 209 .TP 3
 210 1.6 
 211 これがデフォルト値です。Java SE 6 では言語に対する変更は導入されませんでしたが、ソースファイル内のエンコーディングエラーが、以前のような「警告」ではなく、「エラー」として報告されるようになりました。
 212 .TP 3
 213 6 
 214 1.6 と同義です。
 215 .RE
 216 .TP 3
 217 \-sourcepath sourcepath 
 218 クラスまたはインタフェースの定義を検索するソースコードパスを指定します。ユーザークラスパスと同様に、ソースパスの複数のエントリはコロン (\f3:\fP) で区切ります。 ソースパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。パッケージを使っている場合は、ディレクトリまたはアーカイブ内のローカルパス名がパッケージ名を反映していなければなりません。
 219 .LP
 220 \f3注:\fP \  クラスパスからクラスだけでなくそのソースも見つかった場合、そのクラスは自動再コンパイルの対象になることがあります。「型の検索」を参照してください。
 221 .TP 3
 222 \-verbose 
 223 詳細な出力を表示します。ロードされるクラスおよびコンパイルされるソースファイルごとの情報が出力されます。
 224 .TP 3
 225 \-X 
 226 非標準オプションに関する情報を表示して終了します。
 227 .RE
 228 
 229 .LP
 230 .RE
 231 .SS 
 232 クロスコンパイルオプション
 233 .LP
 234 .RS 3
 235 
 236 .LP
 237 .LP
 238 デフォルトでは、クラスのコンパイルは、\f3javac\fP が添付されているプラットフォームのブートストラップクラスおよび拡張機能クラスに対して行われます。ただし、\f3javac\fP は、異なる Java プラットフォームに実装されたブートストラップクラスおよび拡張機能クラスに対してコンパイルを行う「\f2クロスコンパイル\fP」もサポートしています。クロスコンパイルを行う場合は、\f3\-bootclasspath\fP および \f3\-extdirs\fP を使うことが重要です。このあとの「クロスコンパイルの例」を参照してください。
 239 .LP
 240 .RS 3
 241 .TP 3
 242 \-target version 
 243 指定されたバージョンの VM をターゲットにしたクラスファイルを生成します。このクラスファイルは、指定されたターゲット以降のバージョンでは動作しますが、それより前のバージョンの VM では動作しません。有効なターゲットは、\f31.1\fP、\f31.2\fP、\f31.3\fP、\f31.4\fP、\f31.5\fP (\f35\fP も可)、および \f31.6\fP (\f36\fP も可) です。
 244 .LP
 245 \f3\-target\fP のデフォルトは、次のように \f3\-source\fP の値によって決まります。
 246 .RS 3
 247 .TP 2
 248 o
 249 \-source が\f3指定されなかった\fP場合、\-target の値は \f31.6\fP になります。
 250 .TP 2
 251 o
 252 \-source が \f31.2\fP の場合、\-target の値は \f31.4\fP になります。
 253 .TP 2
 254 o
 255 \-source が \f31.3\fP の場合、\-target の値は \f31.4\fP になります。
 256 .TP 2
 257 o
 258 \-source が\f3それ以外の値の場合はすべて\fP、\-target の値は \f3\-source\fP の値になります。
 259 .RE
 260 .TP 3
 261 \-bootclasspath bootclasspath 
 262 指定された一連のブートクラスに対してクロスコンパイルを行います。ユーザークラスパスと同様に、ブートクラスパスの複数のエントリはコロン (\f3:\fP) で区切ります。ブートクラスパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。
 263 .TP 3
 264 \-extdirs directories 
 265 指定された拡張機能ディレクトリに対してクロスコンパイルを行います。\f2directories\fP には、コロンで区切ったディレクトリのリストを指定します。指定したディレクトリ内の各 JAR アーカイブから、クラスファイルが検索されます。
 266 .RE
 267 
 268 .LP
 269 .RE
 270 .SS 
 271 非標準オプション
 272 .LP
 273 .RS 3
 274 
 275 .LP
 276 .RS 3
 277 .TP 3
 278 \-Xbootclasspath/p:path 
 279 ブートストラップクラスパスの前に追加します。
 280 .TP 3
 281 \-Xbootclasspath/a:path 
 282 ブートストラップクラスパスの後ろに追加します。
 283 .TP 3
 284 \-Xbootclasspath/:path 
 285 ブートストラップクラスファイルの位置をオーバーライドします。
 286 .TP 3
 287 \-Xlint 
 288 推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告が推奨されています。
 289 .TP 3
 290 \-Xlint:none 
 291 Java 言語仕様では指定されていないすべての警告を無効にします。
 292 .TP 3
 293 \-Xlint:\-name 
 294 警告 \f2name\fP を無効にします。ただし、\f2name\fP は、\f3\-Xlint:\fP\f2name\fP に使用できる警告名のいずれかになります。この警告名は次のとおりです。
 295 .TP 3
 296 \-Xlint:unchecked 
 297 Java 言語仕様で指定されている未検査変換警告の詳細を示します。
 298 .TP 3
 299 \-Xlint:path 
 300 存在しないパス (classpath、sourcepath など) ディレクトリについて警告します。
 301 .TP 3
 302 \-Xlint:serial 
 303 \f2serialVersionUID\fP 定義が直列化可能クラスにないことを警告します。
 304 .TP 3
 305 \-Xlint:finally 
 306 正常に完了できない \f2finally\fP 節について警告します。
 307 .TP 3
 308 \-Xlint:fallthrough 
 309 fall\-through ケースの \f2switch\fP ブロックをチェックし、検出されたものに対して警告メッセージを表示します。fall\-through ケースは、\f2switch\fP ブロック内の最後のケースを除くケースです。このコードには \f2break\fP 文は含まれません。コードの実行をそのケースから次のケースへ移動します。たとえば、この \f2switch\fP ブロック内の \f2case 1\fP ラベルに続くコードは、\f2break\fP 文で終わっていません。
 310 .RS 3
 311 
 312 .LP
 313 .nf
 314 \f3
 315 .fl
 316 switch (x) {
 317 .fl
 318 case 1:
 319 .fl
 320        System.out.println("1");
 321 .fl
 322        //  No  break;  statement here.
 323 .fl
 324 case 2:
 325 .fl
 326        System.out.println("2");
 327 .fl
 328 }
 329 .fl
 330             
 331 .fl
 332 \fP
 333 .fi
 334 .RE
 335 このコードのコンパイル時に \f2\-Xlint:fallthrough\fP フラグが使用されていた場合、コンパイラは 当該ケースの行番号とともに、fall\-through ケースの可能性があることを示す警告を発行します。
 336 .TP 3
 337 \-Xmaxerrors number 
 338 印刷するエラーの最大数を設定します。
 339 .TP 3
 340 \-Xmaxwarns number 
 341 印刷する警告の最大数を設定します。
 342 .TP 3
 343 \-Xstdout filename 
 344 コンパイラのメッセージを、指定されたファイルに送ります。デフォルトでは、コンパイラのメッセージは \f2System.err\fP に送られます。
 345 .TP 3
 346 \-Xprefer:{newer,source} 
 347 ある型に対してソースファイルとクラスファイルの両方が見つかった場合、そのどちらのファイルを読み取るべきかを指定します (「型の検索」を参照)。\f2\-Xprefer:newer\fP を使用した場合、ある型に対するソースファイルとクラスファイルの新しい方が読み取られます (デフォルト)。\f2\-Xprefer:source\fP オプションを使用した場合、ソースファイルが読み取られます。\f2SOURCE\fP の保存ポリシーを使って宣言された注釈に任意の注釈プロセッサがアクセスできるようにしたい場合は、\f2\-Xprefer:source\fP を使用してください。
 348 .TP 3
 349 \-Xprint 
 350 指定された型のテキスト表現をデバッグ目的で出力します。注釈処理、コンパイルのどちらも実行しません。出力形式は変更される可能性があります。
 351 .TP 3
 352 \-XprintProcessorInfo 
 353 ある特定のプロセッサが処理を依頼されている注釈に関する情報を出力します。
 354 .TP 3
 355 \-XprintRounds 
 356 初回および後続の注釈処理ラウンドに関する情報を出力します。
 357 .RE
 358 
 359 .LP
 360 .RE
 361 .SS 
 362 \-J オプション
 363 .LP
 364 .RS 3
 365 
 366 .LP
 367 .RS 3
 368 .TP 3
 369 \-Joption 
 370 \f3javac\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリは 48M バイトに設定されます。このオプションは \f3\-X\fP で始まっていませんが、\f3javac\fP の「標準オプション」ではありません。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。
 371 .LP
 372 \f3注:\fP \  \f3CLASSPATH\fP、\f3\-classpath\fP、\f3\-bootclasspath\fP、および \f3\-extdirs\fP は、\f3javac\fP を実行するために使うクラスを指定するものでは\f2ありません\fP。このような方法でコンパイラの実装を操作することは、通常は無意味であり、常に危険を伴います。このような方法を使う必要がある場合は、\f3\-J\fP オプションを使って、必要なオプションを背後の \f3java\fP 起動ツールに渡してください。
 373 .RE
 374 
 375 .LP
 376 .RE
 377 .SH "コマンド行引数ファイル"
 378 .LP
 379 
 380 .LP
 381 .LP
 382 javac のコマンド行を短くしたり簡潔にしたりするために、\f2javac\fP コマンドに対する引数 (\f2\-J\fP オプションを除く) を含む 1 つ以上のファイルを指定することができます。この方法を使うと、どのオペレーティングシステム上でも、任意の長さの javac コマンドを作成できます。
 383 .LP
 384 .LP
 385 引数ファイルには、javac のオプションとソースファイル名を自由に組み合わせて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。
 386 .LP
 387 .LP
 388 引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。引数ファイル内のファイル名リストでは、ワイルドカード (*) は使用できません。たとえば、\f2*.java\fP とは指定できません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、\f2\-J\fP オプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。
 389 .LP
 390 .LP
 391 javac を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。javac は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。
 392 .LP
 393 .SS 
 394 例 \- 引数ファイルを 1 つ指定
 395 .LP
 396 .LP
 397 \f2argfile\fP という名前の引数ファイルにすべての javac 引数を格納する場合は、次のように指定します。
 398 .LP
 399 .nf
 400 \f3
 401 .fl
 402   % \fP\f3javac @argfile\fP
 403 .fl
 404       
 405 .fl
 406 .fi
 407 
 408 .LP
 409 .LP
 410 この引数ファイルには、次の例で示されている 2 つのファイルの内容を両方とも入れることができます。
 411 .LP
 412 .SS 
 413 例 \- 引数ファイルを 2 つ指定
 414 .LP
 415 .LP
 416 たとえば、javac オプション用に 1 ファイル、ソースファイル名用に 1 ファイルというように、2 つの引数ファイルを作成することもできます。なお、このあとのリストでは、行の継続文字を使用していません。
 417 .LP
 418 .LP
 419 以下の内容を含む \f2options\fP という名前のファイルを作成します。
 420 .LP
 421 .nf
 422 \f3
 423 .fl
 424      \-d classes
 425 .fl
 426      \-g
 427 .fl
 428      \-sourcepath /java/pubs/ws/1.3/src/share/classes
 429 .fl
 430       
 431 .fl
 432 \fP
 433 .fi
 434 
 435 .LP
 436 .LP
 437 以下の内容を含む \f2classes\fP という名前のファイルを作成します。
 438 .LP
 439 .nf
 440 \f3
 441 .fl
 442      MyClass1.java
 443 .fl
 444      MyClass2.java
 445 .fl
 446      MyClass3.java
 447 .fl
 448       
 449 .fl
 450 \fP
 451 .fi
 452 
 453 .LP
 454 .LP
 455 次のコマンドを使用して \f3javac\fP を実行します。
 456 .LP
 457 .nf
 458 \f3
 459 .fl
 460   % \fP\f3javac @options @classes\fP
 461 .fl
 462       
 463 .fl
 464 .fi
 465 
 466 .LP
 467 .SS 
 468 例 \- パス付きの引数ファイル
 469 .LP
 470 .LP
 471 引数ファイルには、パスを指定できます。ただし、そのファイル内に指定されたファイル名は、現在の作業ディレクトリから見た相対パスになります。つまり、下の例の場合は、\f2path1\fP や \f2path2\fP から見た相対パスではありません。
 472 .LP
 473 .nf
 474 \f3
 475 .fl
 476   % \fP\f3javac @path1/options @path2/classes\fP
 477 .fl
 478       
 479 .fl
 480 .fi
 481 
 482 .LP
 483 .SH "注釈処理"
 484 .LP
 485 
 486 .LP
 487 .LP
 488 \f3javac\fP が注釈処理を直接サポートしているため、独立した注釈処理ツールである \f3apt\fP を使用する必要がなくなりました。
 489 .LP
 490 .LP
 491 注釈処理の API は、\f2javax.annotation.processing\fP および \f2javax.lang.model\fP パッケージとそのサブパッケージ内に定義されています。
 492 .LP
 493 .SS 
 494 注釈処理の概要
 495 .LP
 496 .LP
 497 \f3\-proc:none\fP オプションによって注釈処理が無効化されないかぎり、コンパイラは使用可能なすべての注釈プロセッサを検索します。検索パスは \f3\-processorpath\fP オプションを使って指定できます。検索パスを指定しなかった場合は、ユーザークラスパスが使用されます。プロセッサの検索は、検索パス上の \f2META_INF/services/javax.annotation.processing.Processor\fP という名前のサービスプロバイダ構成ファイルに基づいて行われます。このようなファイルには、使用するすべての注釈プロセッサの名前を、1 行に 1 つずつ含めてください。また、別の方法として、\f3\-processor\fP オプションを使ってプロセッサを明示的に指定することもできます。
 498 .LP
 499 .LP
 500 コンパイラは、コマンド行のソースファイルやクラスを走査することで、どのような注釈が存在しているかを確認し終わると、プロセッサに対して問い合わせを行い、それらのプロセッサがどの注釈を処理できるのかを確認します。一致するものが見つかった場合、そのプロセッサが呼び出されます。各プロセッサは、自身が処理する注釈を「要求」できます。 その場合、それらの注釈に対する別のプロセッサを見つける試みは行われません。すべての注釈が要求されてしまうと、コンパイラはそれ以上プロセッサの検索を行いません。
 501 .LP
 502 .LP
 503 いずれかのプロセッサによって新しいソースファイルが生成されると、注釈処理の 2 回目のラウンドが開始されます。新しく生成されたすべてのソースファイルが走査され、前回と同様に注釈が処理されます。以前のラウンドで呼び出されたプロセッサはすべて、後続のどのラウンドでも呼び出されます。これが、新しいソースファイルが生成されなくなるまで続きます。
 504 .LP
 505 .LP
 506 あるラウンドで新しいソースファイルが生成されなかった場合、注釈プロセッサがあと 1 回だけ呼び出され、必要な処理を実行する機会が与えられます。最後に、\f3\-proc:only\fP オプションが使用されないかぎり、コンパイラは、元のソースファイルと生成されたすべてのソースファイルをコンパイルします。
 507 .LP
 508 .SS 
 509 暗黙的にロードされたソースファイル
 510 .LP
 511 .LP
 512 コンパイラは、一連のソースファイルをコンパイルする際に、別のソースファイルを暗黙的にロードしなければならない場合があります (「型の検索」を参照)。そのようなファイルは、現時点では注釈処理の対象になりません。デフォルトでは、注釈処理が実行され、かつ暗黙的にロードされたソースファイルが 1 つでもコンパイルされた場合にコンパイラは警告を発行します。この警告を抑制する方法については、\-implicit オプションを参照してください。
 513 .LP
 514 .SH "型の検索"
 515 .LP
 516 
 517 .LP
 518 .LP
 519 ソースファイルをコンパイルする場合、コマンド行で指定したソースファイルに型の定義が見つからないとき、コンパイラは通常、その型に関する情報を必要とします。コンパイラは、ソースファイルで使われているクラスまたはインタフェース、拡張されているクラスまたはインタフェース、あるいは実装されているクラスまたはインタフェースすべてについて、型の情報を必要とします。これには、ソースファイルで明示的には言及されていなくても、継承を通じて情報を提供するクラスとインタフェースも含まれます。
 520 .LP
 521 .LP
 522 たとえば、\f3java.applet.Applet\fP をサブクラスにした場合、アプレットの祖先のクラス (\f3java.awt.Panel\fP、\f3java.awt.Container\fP、\f3java.awt.Component\fP、\f3java.lang.Object\fP) を使用していることになります。
 523 .LP
 524 .LP
 525 コンパイラは、型の情報が必要になると、その型を定義しているソースファイルまたはクラスファイルを探します。まず、ブートストラップクラスと拡張機能クラスを検索し、続いてユーザークラスパス (デフォルトではカレントディレクトリ) を検索します。ユーザークラスパスは、\f3CLASSPATH\fP 環境変数を設定して定義するか、または \f3\-classpath\fP コマンド行オプションを使って設定します。詳細は、
 526 .na
 527 「\f2Setting the Class Path\fP」
 528 .fi
 529 (http://java.sun.com/javase/6/docs/technotes/tools/index.html#classpath) を参照してください。
 530 .LP
 531 .LP
 532 \-sourcepath オプションが指定されている場合、コンパイラは、指定されたパスからソースファイルを検索します。それ以外の場合は、ユーザークラスパスからクラスファイルとソースファイルの両方を検索します。
 533 .LP
 534 .LP
 535 \f3\-bootclasspath\fP オプションと \f3\-extdirs\fP オプションを使うと、別のブートストラップクラスや拡張機能クラスを指定できます。このあとの「クロスコンパイルオプション」を参照してください。
 536 .LP
 537 .LP
 538 型の検索に成功した場合の結果は、クラスファイル、ソースファイル、またはその両方である場合があります。両方が見つかった場合、そのどちらを使用すべきかを \-Xprefer オプションでコンパイラに指示できます。\f3newer\fP が指定された場合、コンパイラは 2 つのファイルの新しい方を使用します。\f3source\fP が指定された場合、コンパイラはソースファイルを使用します。デフォルトは \f3newer\fP です。
 539 .LP
 540 .LP
 541 型の検索自体によって、または \f3\-Xprefer\fP が設定された結果として必要な型のソースファイルが見つかった場合、コンパイラはそのソースファイルを読み取り、必要な情報を取得します。さらに、コンパイラはデフォルトで、そのソースファイルのコンパイルも行います。\-implicit オプションを使えばその動作を指定できます。\f3none\fP を指定した場合、そのソースファイルのクラスファイルは生成されません。\f3class\fP を指定した場合、そのソースファイルのクラスファイルが生成されます。
 542 .LP
 543 .LP
 544 コンパイラは、注釈処理の完了後に、ある型情報の必要性を認識する場合があります。その型情報があるソースファイル内に見つかり、かつ \f3\-implicit\fP オプションが指定されていない場合は、そのファイルが注釈処理の対象とならずにコンパイルされることを、コンパイラがユーザーに警告します。この警告を無効にするには、(そのファイルが注釈処理の対象となるように) そのファイルをコマンド行に指定するか、あるいはそのようなソースファイルに対してクラスファイルを生成すべきかどうかを \f3\-implicit\fP オプションを使って指定します。
 545 .LP
 546 .SH "プログラマティックインタフェース"
 547 .LP
 548 
 549 .LP
 550 .LP
 551 \f3javac\fP は、\f2javax.tools\fP パッケージ内のクラスとインタフェースによって定義される新しい Java Compiler API をサポートします。
 552 .LP
 553 .SS 
 554 例
 555 .LP
 556 .LP
 557 コマンド行から指定された引数を使ってコンパイルを実行するには、次のようなコードを使用します。
 558 .LP
 559 .nf
 560 \f3
 561 .fl
 562 JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
 563 .fl
 564 int rc = javac.run(null, null, null, args);
 565 .fl
 566       
 567 .fl
 568 \fP
 569 .fi
 570 
 571 .LP
 572 .LP
 573 この場合、標準出力ストリームにすべての診断メッセージが書き出され、コマンド行から呼び出された \f3javac\fP が返すのと同じ終了コードが返されます。
 574 .LP
 575 .LP
 576 \f2javax.tools.JavaCompiler\fP インタフェース上のほかのメソッドを使えば、診断メッセージの処理やファイルの読み取り元/書き込み先の制御などを行えます。
 577 .LP
 578 .SS 
 579 旧式のインタフェース
 580 .LP
 581 .RS 3
 582 
 583 .LP
 584 .LP
 585 \f3注:\fP \  この API は、下位互換性を確保するためだけに残されています。新しいコードでは、必ず前述の Java Compiler API を使用してください。
 586 .LP
 587 .LP
 588 \f2com.sun.tools.javac.Main\fP クラスには、プログラム内からコンパイラを呼び出すための static メソッドが 2 つ用意されています。それらを次に示します。
 589 .LP
 590 .nf
 591 \f3
 592 .fl
 593 public static int compile(String[] args);
 594 .fl
 595 public static int compile(String[] args, PrintWriter out);
 596 .fl
 597       
 598 .fl
 599 \fP
 600 .fi
 601 
 602 .LP
 603 .LP
 604 \f2args\fP パラメータは、javac プログラムに通常渡される任意のコマンド行引数を表しています。その概要については、前出の「形式」節を参照してください。
 605 .LP
 606 .LP
 607 \f2out\fP パラメータは、コンパイラの診断メッセージの出力先を示します。
 608 .LP
 609 .LP
 610 戻り値は、\f3javac\fP の終了値と同じです。
 611 .LP
 612 .LP
 613 名前が \f2com.sun.tools.javac\fP で始まるパッケージ (非公式には \f2com.sun.tools.javac\fP のサブパッケージとして知られる) に含まれる\f3その他の\fPクラスやメソッドは、どれも完全に内部用であり、いつでも変更される可能性があります。
 614 .LP
 615 .RE
 616 .SH "例"
 617 .LP
 618 .SS 
 619 簡単なプログラムのコンパイル
 620 .LP
 621 .RS 3
 622 
 623 .LP
 624 .LP
 625 \f2Hello.java\fP というソースファイルで、\f3greetings.Hello\fP という名前のクラスを定義しているとします。\f2greetings\fP ディレクトリは、ソースファイルとクラスファイルの両方があるパッケージディレクトリで、現在のディレクトリのすぐ下にあります。このため、この例では、デフォルトのユーザークラスパスを使用できます。また、\f3\-d\fP を使って別の出力先ディレクトリを指定する必要もありません。
 626 .LP
 627 .RS 3
 628 
 629 .LP
 630 .nf
 631 \f3
 632 .fl
 633 % \fP\f3ls\fP
 634 .fl
 635 greetings/
 636 .fl
 637 % \f3ls greetings\fP
 638 .fl
 639 Hello.java
 640 .fl
 641 % \f3cat greetings/Hello.java\fP
 642 .fl
 643 package greetings;
 644 .fl
 645 
 646 .fl
 647 public class Hello {
 648 .fl
 649     public static void main(String[] args) {
 650 .fl
 651         for (int i=0; i < args.length; i++) {
 652 .fl
 653             System.out.println("Hello " + args[i]);
 654 .fl
 655         }
 656 .fl
 657     }
 658 .fl
 659 }
 660 .fl
 661 % \f3javac greetings/Hello.java\fP
 662 .fl
 663 % \f3ls greetings\fP
 664 .fl
 665 Hello.class   Hello.java
 666 .fl
 667 % \f3java greetings.Hello World Universe Everyone\fP
 668 .fl
 669 Hello World
 670 .fl
 671 Hello Universe
 672 .fl
 673 Hello Everyone
 674 .fl
 675         
 676 .fl
 677 .fi
 678 .RE
 679 
 680 .LP
 681 .RE
 682 .SS 
 683 複数のソースファイルのコンパイル
 684 .LP
 685 .RS 3
 686 
 687 .LP
 688 .LP
 689 次の例では、パッケージ \f2greetings\fP 内のすべてのソースファイルをコンパイルします。
 690 .LP
 691 .RS 3
 692 
 693 .LP
 694 .nf
 695 \f3
 696 .fl
 697 % \fP\f3ls\fP
 698 .fl
 699 greetings/
 700 .fl
 701 % \f3ls greetings\fP
 702 .fl
 703 Aloha.java         GutenTag.java      Hello.java         Hi.java
 704 .fl
 705 % \f3javac greetings/*.java\fP
 706 .fl
 707 % \f3ls greetings\fP
 708 .fl
 709 Aloha.class         GutenTag.class      Hello.class         Hi.class
 710 .fl
 711 Aloha.java          GutenTag.java       Hello.java          Hi.java
 712 .fl
 713 
 714 .fl
 715         
 716 .fl
 717 .fi
 718 .RE
 719 
 720 .LP
 721 .RE
 722 .SS 
 723 ユーザークラスパスの指定
 724 .LP
 725 .RS 3
 726 
 727 .LP
 728 .LP
 729 上の例のソースファイルのうち 1 つを変更し、変更後のファイルを再コンパイルするとします。
 730 .LP
 731 .RS 3
 732 
 733 .LP
 734 .nf
 735 \f3
 736 .fl
 737 % \fP\f3pwd\fP
 738 .fl
 739 /examples
 740 .fl
 741 % \f3javac greetings/Hi.java\fP
 742 .fl
 743         
 744 .fl
 745 .fi
 746 .RE
 747 
 748 .LP
 749 .LP
 750 \f2greetings.Hi\fP は、\f2greetings\fP パッケージ内のほかのクラスを参照しているため、コンパイラはこれらのクラスを探す必要があります。上の例では、デフォルトのユーザークラスパスが、パッケージディレクトリを含むディレクトリと同じであるため、コンパイルは正常に実行されます。ただし、現在どのディレクトリにいるかに関係なく、このファイルを再コンパイルする場合は、ユーザークラスパスに \f2/examples\fP を追加する必要があります。ユーザークラスパスにエントリを追加するには、\f3CLASSPATH\fP を設定する方法もありますが、ここでは \f3\-classpath\fP オプションを使うことにします。
 751 .LP
 752 .RS 3
 753 
 754 .LP
 755 .nf
 756 \f3
 757 .fl
 758 % \fP\f3javac \-classpath /examples /examples/greetings/Hi.java\fP
 759 .fl
 760         
 761 .fl
 762 .fi
 763 .RE
 764 
 765 .LP
 766 .LP
 767 再度 \f2greetings.Hi\fp を変更してバナーユーティリティを使うようにした場合は、このバナーユーティリティもユーザークラスパスを通じてアクセスできるようになっている必要があります。
 768 .LP
 769 .RS 3
 770 
 771 .LP
 772 .nf
 773 \f3
 774 .fl
 775 % \fP\f3javac \-classpath /examples:/lib/Banners.jar \\ 
 776 .fl
 777             /examples/greetings/Hi.java\fP
 778 .fl
 779         
 780 .fl
 781 .fi
 782 .RE
 783 
 784 .LP
 785 .LP
 786 \f2greetings\fP 内のクラスを実行するには、\f2greetings\fP と、\f2greetings\fP が使うクラスの両方にアクセスできる必要があります。
 787 .LP
 788 .RS 3
 789 
 790 .LP
 791 .nf
 792 \f3
 793 .fl
 794 % \fP\f3java \-classpath /examples:/lib/Banners.jar greetings.Hi\fP
 795 .fl
 796         
 797 .fl
 798 .fi
 799 .RE
 800 
 801 .LP
 802 .RE
 803 .SS 
 804 ソースファイルとクラスファイルの分離
 805 .LP
 806 .RS 3
 807 
 808 .LP
 809 .LP
 810 特に大規模プロジェクトの場合は、ソースファイルとクラスファイルを別々のディレクトリに置くと便利なことがあります。クラスファイルの出力先を別に指定するには、\f3\-d\fP を使います。ソースファイルはユーザークラスパスにはないので、\f3\-sourcepath\fP を使って、コンパイラがソースファイルを見つけることができるようにします。
 811 .LP
 812 .RS 3
 813 
 814 .LP
 815 .nf
 816 \f3
 817 .fl
 818 % \fP\f3ls\fP
 819 .fl
 820 classes/  lib/      src/
 821 .fl
 822 % \f3ls src\fP
 823 .fl
 824 farewells/
 825 .fl
 826 % \f3ls src/farewells\fP
 827 .fl
 828 Base.java      GoodBye.java
 829 .fl
 830 % \f3ls lib\fP
 831 .fl
 832 Banners.jar
 833 .fl
 834 % \f3ls classes\fP
 835 .fl
 836 % \f3javac \-sourcepath src \-classpath classes:lib/Banners.jar \\ 
 837 .fl
 838             src/farewells/GoodBye.java \-d classes\fP
 839 .fl
 840 % \f3ls classes\fP
 841 .fl
 842 farewells/
 843 .fl
 844 % \f3ls classes/farewells\fP
 845 .fl
 846 Base.class      GoodBye.class
 847 .fl
 848 
 849 .fl
 850         
 851 .fl
 852 .fi
 853 .RE
 854 
 855 .LP
 856 .LP
 857 \f3注:\fP \  コマンド行では \f2src/farewells/Base.java\fP を指定していませんが、このファイルもコンパイラによってコンパイルされています。自動コンパイルを監視するには、\f3\-verbose\fP オプションを使います。
 858 .LP
 859 .RE
 860 .SS 
 861 クロスコンパイルの例
 862 .LP
 863 .RS 3
 864 
 865 .LP
 866 .LP
 867 ここでは、javac を使って、1.5 VM 上で実行するコードをコンパイルします。
 868 .LP
 869 .RS 3
 870 
 871 .LP
 872 .nf
 873 \f3
 874 .fl
 875 % \fP\f3javac \-target 1.5 \-bootclasspath jdk1.5.0/lib/rt.jar \\ 
 876 .fl
 877             \-extdirs "" OldCode.java\fP
 878 .fl
 879         
 880 .fl
 881 .fi
 882 .RE
 883 
 884 .LP
 885 .LP
 886 \f3\-target 1.5\fP オプションにより、1.5 VM と互換性のあるクラスファイルが生成されます。デフォルトでは、\f3javac\fP は JDK 6 用にコンパイルします。
 887 .LP
 888 .LP
 889 Java プラットフォーム JDK の \f3javac\fP は、デフォルトではそれ自身のブートストラップクラスに対してコンパイルを行うので、代わりに JDK 1.5 のブートストラップクラスに対してコンパイルを行うように \f3javac\fP を設定する必要があります。これは、\f3\-bootclasspath\fP および \f3\-extdirs\fP を使って指定します。この指定を行わないと、1.5 VM には存在しない Java プラットフォーム API に対応したコンパイルが行われるため、プログラムの実行時に失敗するでしょう。
 890 .LP
 891 .RE
 892 .SH "関連項目"
 893 .LP
 894 
 895 .LP
 896 .RS 3
 897 .TP 2
 898 o
 899 .na
 900 「\f2The javac Guide\fP」
 901 .fi
 902 (+http://docs.oracle.com/javase/6/docs/technotes/guides/javac/index.html)
 903 .TP 2
 904 o
 905 java(1) \- Java アプリケーション起動プログラム
 906 .TP 2
 907 o
 908 jdb(1) \- Java デバッガ
 909 .TP 2
 910 o
 911 javah(1) \- C 言語のヘッダとスタブファイルのジェネレータ
 912 .TP 2
 913 o
 914 javap(1) \- Java クラスファイル逆アセンブラ
 915 .TP 2
 916 o
 917 javadoc(1) \- Java API ドキュメントジェネレータ
 918 .TP 2
 919 o
 920 jar(1) \- JAR アーカイブツール
 921 .TP 2
 922 o
 923 .na
 924 「\f2The Java Extensions Framework\fP」
 925 .fi
 926 (http://docs.oracle.com/javase/6/docs/technotes/guides/extensions/index.html)
 927 .RE
 928 
 929 .LP
 930 
 931 .LP
 932