jdk/src/linux/doc/man/ja/javac.1
author katleman
Thu, 05 Jan 2012 08:42:37 -0800
changeset 11376 075fe3928b7f
parent 9566 d7241af95355
child 23600 d21826f6c789
permissions -rw-r--r--
Added tag jdk8-b20 for changeset 90e14ec89395

." Copyright (c) 1994, 2011, Oracle and/or its affiliates. All rights reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH javac 1 "07 May 2011"

.LP
.SH "名前"
javac \- Java プログラミング言語コンパイラ
.LP
.RS 3
.TP 2
o
形式 
.TP 2
o
説明 
.TP 2
o
オプション 
.TP 2
o
コマンド行引数ファイル 
.TP 2
o
注釈処理 
.TP 2
o
型の検索 
.TP 2
o
プログラマティックインタフェース 
.TP 2
o

.TP 2
o
関連項目 
.RE

.LP
.SH "形式"
.LP
.nf
\f3
.fl
        \fP\f3javac\fP [ options ] [ sourcefiles ] [ classes ] [ @argfiles ]
.fl

.fl
.fi

.LP
.LP
引数は順不同です。
.LP
.RS 3
.TP 3
options 
コマンド行オプション。 
.TP 3
sourcefiles 
コンパイルされる 1 つ以上のソースファイル (MyClass.java など) 
.TP 3
classes 
注釈の処理対象となる 1 つ以上のクラス (MyPackage.MyClass など) 
.TP 3
@argfiles 
オプションとソースファイルを列挙した 1 つ以上のファイル。このファイルの中では \f2\-J\fP オプションは指定できません。 
.RE

.LP
.SH "説明"
.LP
.LP
\f3javac\fP ツールは、Java プログラミング言語で記述されたクラスとインタフェースの定義を読み取り、バイトコードのクラスファイルにコンパイルします。また、Java ソースファイルおよびクラス内の注釈の処理も行います。
.LP
.LP
ソースコードのファイル名を \f3javac\fP に渡すには、次の 2 つの方法があります。
.LP
.RS 3
.TP 2
o
ソースファイルの数が少ない場合は、ファイル名をコマンド行で直接指定します。 
.TP 2
o
ソースファイルの数が多い場合は、ファイル名を空白または改行で区切って、1 つのファイルに列挙します。次に、このリストファイル名の先頭に \f3@\fP を付けて、\f3javac\fP のコマンド行で指定します。 
.RE

.LP
.LP
ソースコードのファイル名は \f2.java\fP 拡張子を、クラスのファイル名は \f2.class\fP 拡張子を持っていなければなりません。また、ソースファイルとクラスファイルのどちらも、該当するクラスに対応するルート名を持っていなければなりません。たとえば、 \f2MyClass\fP という名前のクラスは、 \f2MyClass.java\fP という名前のソースファイルに記述します。このソースファイルは、 \f2MyClass.class\fP という名前のバイトコードクラスファイルにコンパイルされます。
.LP
.LP
内部クラスが定義されていると、追加のクラスファイルが生成されます。これらのクラスファイルの名前は、 \f2MyClass$MyInnerClass.class\fP のように、外部クラス名と内部クラス名を組み合わせたものになります。
.LP
.LP
ソースファイルは、パッケージツリーを反映したディレクトリツリーに配置する必要があります。たとえば、すべてのソースファイルを \f3/workspace\fP に置いている場合、 \f2com.mysoft.mypack.MyClass\fP のソースコードは \f3/workspace/com/mysoft/mypack/MyClass.java\fP にある必要があります。
.LP
.LP
デフォルトでは、コンパイラは、各クラスファイルを対応するソースファイルと同じディレクトリに置きます。別の出力先ディレクトリを指定するには、\f3\-d\fP を使用します (このあとのオプションを参照)。
.LP
.SH "オプション"
.LP
.LP
コンパイラには、現在の開発環境でサポートされており、将来のリリースでもサポートされる標準オプションのセットがあります。これ以外の非標準オプションは、現在の仮想マシンおよびコンパイラの実装に固有のオプションで、将来に変更される可能性があります。非標準オプションは、\f3\-X\fP で始まります。
.LP
.SS 
標準オプション
.LP
.RS 3
.TP 3
\-Akey[=value] 
注釈プロセッサに渡されるオプション。これらは、javac によって直接解釈されず、個々のプロセッサによって使用されます。\f2key\fP には、1 つまたは複数の識別子を「.」で区切ったものを指定してください。 
.TP 3
\-cp path または \-classpath path 
ユーザーのクラスファイルおよび (場合によっては) 注釈プロセッサやソースファイルの検索場所を指定します。このクラスパスは \f3CLASSPATH\fP 環境変数のユーザークラスパスをオーバーライドします。\f3CLASSPATH\fP、\f3\-cp\fP、\f3\-classpath\fP のいずれも指定されていない場合、ユーザークラスパスは、現在のディレクトリになります。詳細は、「クラスパスの設定」を参照してください。 
.LP
\f3\-sourcepath\fP オプションが指定されていない場合は、ソースファイルもユーザークラスパスから検索されます。 
.LP
\f3\-processorpath\fP オプションが指定されていない場合は、注釈プロセッサもユーザークラスパスから検索されます。  
.TP 3
\-Djava.ext.dirs=directories 
インストール型拡張機能の位置をオーバーライドします。 
.TP 3
\-Djava.endorsed.dirs=directories 
承認された標準パスの位置をオーバーライドします。 
.TP 3
\-d directory 
クラスファイルの出力先ディレクトリを設定します。そのディレクトリはすでに存在している必要があります。\f3javac\fP は作成しません。クラスがパッケージの一部である場合、\f3javac\fP は、必要に応じてディレクトリを作成し、パッケージ名を反映したサブディレクトリにクラスファイルを置きます。たとえば、\f3\-d /home/myclasses\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP である場合、クラスファイルは \f2/home/myclasses/com/mypackage/MyClass.class\fP になります。 
.LP
\f3\-d\fP が指定されなかった場合、\f3javac\fP は各クラスファイルを、その生成元となるソースファイルと同じディレクトリ内に格納します。 
.LP
\f3注:\fP \f3\-d\fP で指定したディレクトリはユーザークラスパスに自動的には追加されません。  
.TP 3
\-deprecation 
推奨されないメンバーやクラスが、使用またはオーバーライドされるたびに説明を表示します。\f3\-deprecation\fP が指定されていない場合、\f3javac\fP は、推奨されないメンバーやクラスを使用またはオーバーライドしているソースファイルの要約を表示します。\f3\-deprecation\fP は \f3\-Xlint:deprecation\fP の省略表記です。 
.TP 3
\-encoding encoding 
ソースファイルのエンコーディング名 ( \f2EUC\-JP や UTF\-8\fP など) を指定します。\f3\-encoding\fP が指定されていない場合は、プラットフォームのデフォルトコンバータが使われます。  
.TP 3
\-endorseddirs directories 
承認された標準パスの位置をオーバーライドします。 
.TP 3
\-extdirs directories 
\f2ext\fP ディレクトリの位置をオーバーライドします。\f2directories\fP 変数には、コロンで区切ったディレクトリのリストを指定します。指定したディレクトリ内の各 JAR アーカイブから、クラスファイルが検索されます。見つかったすべての JAR アーカイブは自動的にクラスパスの一部になります。 
.LP
クロスコンパイル (異なる Java プラットフォームに実装されたブートストラップクラスや拡張機能クラスに対してコンパイルを行う) を実行する場合、このオプションには拡張機能クラスを含むディレクトリを指定します。詳細は、「クロスコンパイルオプション」を参照してください。  
.TP 3
\-g 
局所変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソースファイル情報だけが生成されます。 
.TP 3
\-g:none 
デバッグ情報を生成しません。 
.TP 3
\-g:{keyword list} 
コンマで区切られたキーワードリストにより指定された、特定の種類のデバッグ情報だけを生成します。次のキーワードが有効です。 
.RS 3
.TP 3
source 
ソースファイルのデバッグ情報 
.TP 3
lines 
行番号のデバッグ情報 
.TP 3
vars 
局所変数のデバッグ情報 
.RE
.TP 3
\-help 
標準オプションの形式を表示します。 
.TP 3
\-implicit:{class,none} 
暗黙的にロードされたソースファイルに対するクラスファイルの生成を制御します。クラスファイルを自動生成するには、\f3\-implicit:class\fP を使用します。クラスファイルの生成を抑制するには、\f3\-implicit:none\fP を使用します。このオプションが指定されなかった場合のデフォルト動作は、クラスファイルの自動生成になります。その場合、そのようなクラスファイルが生成された時に注釈処理も実行されると、コンパイラから警告が発行されます。このオプションが明示的に設定された場合には、警告は発行されません。「型の検索」を参照してください。  
.TP 3
\-Joption 
\f3javac\fP が呼び出す \f3java\fP 起動ツールに、\f2option\fP を渡します。たとえば、\f3\-J\-Xms48m\fP と指定すると、スタートアップメモリーは 48M バイトに設定されます。\f3\-J\fP を使って、Java で記述されたアプリケーションを実行する背後の VM にオプション渡すことは、よく行われています。 
.LP
\f3注:\fP \f3CLASSPATH\fP、\f3\-classpath\fP、\f3\-bootclasspath\fP、および \f3\-extdirs\fP は、\f3javac\fP を実行するために使うクラスを指定するものではありません。このような方法でコンパイラの実装を操作することは、通常は無意味であり、常に危険を伴います。このような方法を使う必要がある場合は、\f3\-J\fP オプションを使って、必要なオプションを背後の \f3java\fP 起動ツールに渡してください。  
.TP 3
\-nowarn 
警告メッセージを無効にします。これは \f3\-Xlint:none\fP と同じ意味です。 
.TP 3
\-proc: {none,only} 
注釈処理、コンパイル、その両方、のいずれを実行するかを制御します。\f3\-proc:none\fP は、注釈処理なしでコンパイルが実行されることを意味します。\f3\-proc:only\fP は、注釈処理だけが実行され、後続のコンパイルはまったく実行されないことを意味します。 
.TP 3
\-processor class1[,class2,class3...] 
実行する注釈プロセッサの名前。これを指定した場合、デフォルトの検索処理は省略されます。 
.TP 3
\-processorpath path 
注釈プロセッサの検索場所を指定します。このオプションを使用しなかった場合、クラスパス内でプロセッサの検索が行われます。 
.TP 3
\-s dir 
生成されたソースファイルの格納先となるディレクトリを指定します。そのディレクトリはすでに存在している必要があります。\f3javac\fP は作成しません。クラスがパッケージの一部になっていた場合、コンパイラはそのソースファイルを、パッケージ名を反映したサブディレクトリ内に格納します。その際、必要に応じてディレクトリを作成します。たとえば、ユーザーが \f3\-s /home/mysrc\fP と指定し、クラスの名前が \f2com.mypackage.MyClass\fP であった場合、そのソースファイルは \f2/home/mysrc/com/mypackage/MyClass.java\fP 内に格納されます。 
.TP 3
\-source release 
受け付けるソースコードのバージョンを指定します。\f2release\fP には次の値を指定できます。 
.RS 3
.TP 3
1.3 
このコンパイラでは、JDK 1.3 以降に導入されたアサーション、総称、または他の言語機能をサポートしません。 
.TP 3
1.4 
JDK 1.4 で導入された、アサーションを含むコードを受け付けます。 
.TP 3
1.5 
JDK 5 で導入された総称および他の言語機能を含んだコードを受け付けます。 
.TP 3
5 
1.5 と同義です。 
.TP 3
1.6 
これがデフォルト値です。Java SE 6 では言語に対する変更は導入されませんでしたが、ソースファイル内のエンコーディングエラーが、以前のような「警告」ではなく、「エラー」として報告されるようになりました。 
.TP 3
6 
1.6 と同義です。 
.TP 3
1.7 
JDK 7 で導入された機能を含むコードを受け付けます。 
.TP 3
7 
1.7 と同義です。 
.RE
.TP 3
\-sourcepath sourcepath 
クラスまたはインタフェースの定義を検索するソースコードパスを指定します。ユーザークラスパスと同様に、ソースパスの複数のエントリはコロン (\f3:\fP) で区切ります。ソースパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。パッケージを使っている場合は、ディレクトリまたはアーカイブ内のローカルパス名がパッケージ名を反映していなければなりません。 
.LP
\f3注:\fP\ クラスパスからクラスだけでなくそのソースも見つかった場合、そのクラスは自動再コンパイルの対象になることがあります。「型の検索」を参照してください。  
.TP 3
\-verbose 
詳細な出力を表示します。ロードされるクラスおよびコンパイルされるソースファイルごとの情報が出力されます。 
.TP 3
\-version 
バージョン情報を出力します。  
.TP 3
\-Werror 
警告が発生した場合にコンパイルを終了します。 
.TP 3
\-X 
非標準オプションに関する情報を表示して終了します。 
.RE

.LP
.SS 
クロスコンパイルオプション
.LP
.LP
デフォルトでは、クラスのコンパイルは、\f3javac\fP が添付されているプラットフォームのブートストラップクラスおよび拡張機能クラスに対して行われます。ただし、\f3javac\fP は、異なる Java プラットフォームに実装されたブートストラップクラスおよび拡張機能クラスに対してコンパイルを行う「クロスコンパイル」もサポートしています。クロスコンパイルを行う場合は、\f3\-bootclasspath\fP および \f3\-extdirs\fP を使うことが重要です。このあとの「クロスコンパイルの例」を参照してください。
.LP
.RS 3
.TP 3
\-target version 
指定されたバージョンの VM をターゲットにしたクラスファイルを生成します。このクラスファイルは、指定されたターゲット以降のバージョンでは動作しますが、それより前のバージョンの VM では動作しません。有効なターゲットは、\f31.1\fP、\f31.2\fP、\f31.3\fP、\f31.4\fP、\f31.5\fP (\f35\fP も可)、\f31.6\fP (\f36\fP も可)、および \f31.7\fP (\f37\fP も可) です。 
.LP
\f3\-target\fP のデフォルトは、次のように \f3\-source\fP の値によって決まります。 
.RS 3
.TP 2
o
\-source が\f3指定されなかった\fP場合、\-target の値は \f31.7\fP になります。 
.TP 2
o
\-source が\f31.2\fP の場合、\-target の値は \f31.4\fP になります。 
.TP 2
o
\-source が\f31.3\fP の場合、\-target の値は \f31.4\fP になります。 
.TP 2
o
\-source が\f3それ以外の値の場合はすべて\fP、\f3\\\-target\fP の値は \f3\-source\fP の値になります。 
.RE
.TP 3
\-bootclasspath bootclasspath 
指定された一連のブートクラスに対してクロスコンパイルを行います。ユーザークラスパスと同様に、ブートクラスパスの複数のエントリはコロン (\f3:\fP) で区切ります。ブートクラスパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。 
.RE

.LP
.SS 
非標準オプション
.LP
.RS 3
.TP 3
\-Xbootclasspath/p:path 
ブートストラップクラスパスの前に追加します。 
.TP 3
\-Xbootclasspath/a:path 
ブートストラップクラスパスの後ろに追加します。 
.TP 3
\-Xbootclasspath/:path 
ブートストラップクラスファイルの位置をオーバーライドします。 
.TP 3
\-Xlint 
推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。 
.TP 3
\-Xlint:all 
推奨されるすべての警告を有効にします。このリリースでは、利用可能なすべての警告を有効にすることが推奨されています。 
.TP 3
\-Xlint:none 
すべての警告を無効にします。 
.TP 3
\-Xlint:name 
警告 \f2name\fP を有効にします。このオプションで有効にできる警告のリストについては、「\-Xlint オプションを使って有効または無効にできる警告」を参照してください。 
.TP 3
\-Xlint:\-name 
警告 \f2name\fP を無効にします。このオプションで無効にできる警告のリストについては、「\-Xlint オプションを使って有効または無効にできる警告」を参照してください。 
.TP 3
\-Xmaxerrs number 
印刷するエラーの最大数を設定します。 
.TP 3
\-Xmaxwarns number 
印刷する警告の最大数を設定します。 
.TP 3
\-Xstdout filename 
コンパイラのメッセージを、指定されたファイルに送ります。デフォルトでは、コンパイラのメッセージは \f2System.err\fP に送られます。 
.TP 3
\-Xprefer:{newer,source} 
ある型に対してソースファイルとクラスファイルの両方が見つかった場合、そのどちらのファイルを読み取るべきかを指定します (「型の検索」を参照)。\f2\-Xprefer:newer\fP を使用した場合、ある型に対するソースファイルとクラスファイルの新しい方が読み取られます (デフォルト)。\f2\-Xprefer:source\fP オプションを使用した場合、ソースファイルが読み取られます。SOURCE の保存ポリシーを使って宣言された注釈に任意の注釈プロセッサがアクセスできるようにする場合は、\f2\-Xprefer:source\fP \f2を使用してください\fP。  
.TP 3
\-Xpkginfo:{always,legacy,nonempty} 
パッケージ情報ファイルの処理を指定します。 
.TP 3
\-Xprint 
指定された型のテキスト表現をデバッグ目的で出力します。注釈処理、コンパイルのどちらも実行しません。出力形式は変更される可能性があります。 
.TP 3
\-XprintProcessorInfo 
ある特定のプロセッサが処理を依頼されている注釈に関する情報を出力します。 
.TP 3
\-XprintRounds 
初回および後続の注釈処理ラウンドに関する情報を出力します。 
.RE

.LP
.SS 
\-Xlint オプションを使って有効または無効にできる警告
.LP
.LP
\f3\-Xlint:\fP\f2name\fP オプションを使って警告 \f2name\fP を有効にします。ただし、\f2name\fP は次の警告名のいずれかになります。同様に、\f3\-Xlint:\-\fP\f2name\fP オプションを使って警告 \f2name\fP を無効にできます。
.LP
.RS 3
.TP 3
cast 
不要で冗長なキャストについて警告します。次に例を示します。 
.nf
\f3
.fl
String s = (String)"Hello!"
.fl
\fP
.fi
.TP 3
classfile 
クラスファイルの内容に関連した問題について警告します。 
.TP 3
deprecation 
非推奨項目の使用について警告します。次に例を示します。 
.nf
\f3
.fl
    java.util.Date myDate = new java.util.Date();
.fl
    int currentDay = myDate.getDay();
.fl
\fP
.fi
.LP
メソッド \f2java.util.Date.getDay\fP は JDK 1.1 以降は推奨されていません。  
.TP 3
dep\-ann 
\f2@deprecated\fP Javadoc コメントでドキュメント化されているが、 \f2@Deprecated\fP 注釈が付いていない項目について警告します。次に例を示します。 
.nf
\f3
.fl
  /**
.fl
   * @deprecated As of Java SE 7, replaced by {@link #newMethod()}
.fl
   */
.fl

.fl
  public static void deprecatedMethood() { }
.fl

.fl
  public static void newMethod() { }
.fl
\fP
.fi
.TP 3
divzero 
一定の整数 0 で除算されることについて警告します。次に例を示します。 
.nf
\f3
.fl
    int divideByZero = 42 / 0;
.fl
\fP
.fi
.TP 3
empty 
\f2if\fP 文以降が空の文であることについて警告します。次に例を示します。 
.nf
\f3
.fl
class E {
.fl
    void m() {
.fl
        if (true) ;
.fl
    }
.fl
}
.fl
\fP
.fi
.TP 3
fallthrough 
fall\-through ケースの \f2switch\fP ブロックをチェックし、検出されたものに対して警告メッセージを表示します。Fall\-through ケースは、\f2switch\fP ブロック内の最後のケースを除くケースです。このコードには \f2break\fP 文は含まれません。コードの実行をそのケースから次のケースへ移動します。たとえば、この \f2switch\fP ブロック内の \f2case 1\fP ラベルに続くコードは、\f2break\fP 文で終わっていません。 
.nf
\f3
.fl
switch (x) {
.fl
case 1:
.fl
       System.out.println("1");
.fl
       //  No break statement here.
.fl
case 2:
.fl
       System.out.println("2");
.fl
}
.fl
\fP
.fi
.LP
このコードのコンパイル時に \f2\-Xlint:fallthrough\fP フラグが使用されていた場合、コンパイラは 当該ケースの行番号とともに、fall\-through ケースの可能性があることを示す警告を発行します。  
.TP 3
finally 
正常に完了できない \f2finally\fP 節について警告します。次に例を示します。 
.nf
\f3
.fl
  public static int m() {
.fl
    try {
.fl
      throw new NullPointerException();
.fl
    } catch (NullPointerException e) {
.fl
      System.err.println("Caught NullPointerException.");
.fl
      return 1;
.fl
    } finally {
.fl
      return 0;
.fl
    }
.fl
  }
.fl
\fP
.fi
.LP
この例では、コンパイラは \f2finally\fP ブロックに関する警告を生成します。このメソッドが呼び出されると、値 1 ではなく \f20\fP が \f2返されます\fP。 \f2finally\fP ブロックは、 \f2try\fP ブロックが終了すると必ず実行されます。この例では、制御が \f2catch\fP に移された場合、メソッドは終了します。ただし、 \f2finally\fP ブロックは実行される必要があるため、制御がすでにこのメソッドの外部に移されていても、このブロックは実行されます。  
.TP 3
options 
コマンド行オプションの使用に関する問題について警告します。この種の警告の例については、「クロスコンパイルの例」を参照してください。 
.TP 3
overrides 
メソッドのオーバーライドに関する問題について警告します。たとえば、次の 2 つのクラスがあるとします。 
.nf
\f3
.fl
public class ClassWithVarargsMethod {
.fl
  void varargsMethod(String... s) { }
.fl
}
.fl
\fP
.fi
.nf
\f3
.fl
public class ClassWithOverridingMethod extends ClassWithVarargsMethod {
.fl
  @Override
.fl
  void varargsMethod(String[] s) { }
.fl
}
.fl
\fP
.fi
.LP
コンパイラは次のような警告を生成します。 
.nf
\f3
.fl
warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod overrides varargsMethod(String...) in ClassWithVarargsMethod; overriding method is missing '...'
.fl
\fP
.fi
.LP
コンパイラは、varargs メソッドを検出すると、varargs の仮パラメータを配列に変換します。メソッド \f2ClassWithVarargsMethod.varargsMethod\fP では、コンパイラは varargs の仮パラメータ \f2String... s\fP を仮パラメータ \f2String[] s\fP に変換します。String[] s は、メソッド \f2ClassWithOverridingMethod.varargsMethod\fP の仮パラメータに対応する配列です。その結果、この例ではコンパイルが行われます。  
.TP 3
path 
コマンド行での無効なパス要素と存在しないパスディレクトリについて警告します (クラスパス、ソースパスなどのパス関連)。このような警告を \f2@SuppressWarnings\fP 注釈で抑制することはできません。次に例を示します。 
.nf
\f3
.fl
javac \-Xlint:path \-classpath /nonexistentpath Example.java
.fl
\fP
.fi
.TP 3
processing 
注釈処理に関する問題について警告します。コンパイラがこの警告を生成するのは、注釈を含むクラスがあるときに、使用している注釈プロセッサでその型の例外を処理できない場合です。単純な注釈プロセッサの例を次に示します。 
.LP
\f3ソースファイル \fP\f4AnnoProc.java\fP: 
.nf
\f3
.fl
import java.util.*;
.fl
import javax.annotation.processing.*;
.fl
import javax.lang.model.*;
.fl
import javax.lang.model.element.*;
.fl

.fl
@SupportedAnnotationTypes("NotAnno")
.fl
public class AnnoProc extends AbstractProcessor {
.fl
    public boolean process(Set<? extends TypeElement> elems, RoundEnvironment renv) {
.fl
        return true;
.fl
    }
.fl

.fl
    public SourceVersion getSupportedSourceVersion() {
.fl
        return SourceVersion.latest();
.fl
    }
.fl
}
.fl
\fP
.fi
.LP
\f3ソースファイル \fP\f4AnnosWithoutProcessors.java\fP\f3:\fP 
.nf
\f3
.fl
@interface Anno { }
.fl

.fl
@Anno
.fl
class AnnosWithoutProcessors { }
.fl
\fP
.fi
.LP
次のコマンドは、注釈プロセッサ \f2AnnoProc\fP をコンパイルし、この注釈プロセッサをソースファイル \f2AnnosWithoutProcessors.java\fP に対して実行します。 
.nf
\f3
.fl
% javac AnnoProc.java
.fl
% javac \-cp . \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors.java
.fl
\fP
.fi
.LP
コンパイラがソースファイル \f2AnnosWithoutProcessors.java\fP に対して注釈プロセッサを実行すると、次の警告が生成されます。 
.nf
\f3
.fl
warning: [processing] No processor claimed any of these annotations: Anno
.fl
\fP
.fi
.LP
この問題を解決するには、クラス \f2AnnosWithoutProcessors\fP で定義および使用される注釈の名前を \f2Anno\fP から \f2NotAnno\fP に変更します。  
.TP 3
rawtypes 
raw 型に対する未検査操作について警告します。次の文では、 \f2rawtypes\fP 警告が生成されます。 
.nf
\f3
.fl
void countElements(List l) { ... }
.fl
\fP
.fi
.LP
次の文では、 \f2rawtypes\fP 警告は生成されません。 
.nf
\f3
.fl
void countElements(List<?> l) { ... }
.fl
\fP
.fi
.LP
\f2List\fP は raw 型です。ただし、 \f2List<?>\fP はアンバウンド形式のワイルドカードのパラメータ化された型です。 \f2List\fP はパラメータ化されたインタフェースなので、必ずその型引数を指定する必要があります。この例では、 \f2List\fP の仮引数はアンバウンド形式のワイルドカード (\f2?\fP) を使ってその仮型パラメータとして指定されます。つまり、 \f2countElements\fP メソッドは \f2List\fP インタフェースのどのインスタンス化も受け付けることができます。  
.TP 3
serial 
直列化可能クラスに \f2serialVersionUID\fP 定義がないことを警告します。次に例を示します。 
.nf
\f3
.fl
public class PersistentTime implements Serializable
.fl
{
.fl
  private Date time;
.fl

.fl
   public PersistentTime() {
.fl
     time = Calendar.getInstance().getTime();
.fl
   }
.fl

.fl
   public Date getTime() {
.fl
     return time;
.fl
   }
.fl
}
.fl
\fP
.fi
.LP
コンパイラは次の警告を生成します。 
.nf
\f3
.fl
warning: [serial] serializable class PersistentTime has no definition of serialVersionUID
.fl
\fP
.fi
.LP
直列化可能クラスが \f2serialVersionUID\fP という名前のフィールドを明示的に宣言しない場合、直列化ランタイムは「Java オブジェクト直列化仕様」で説明されているように、クラスのさまざまな側面に基づいて、クラスの \f2serialVersionUID\fP のデフォルト値を計算します。ただし、すべての直列化可能クラスが \f2serialVersionUID\fP 値を明示的に宣言することを強くお勧めします。これは、 \f2serialVersionUID\fP 値を計算するデフォルトのプロセスが、コンパイラの実装によって異なる可能性のあるクラスの詳細にきわめて影響を受けやすく、直列化復元中に予期しない \f2InvalidClassExceptions\fP が発生する可能性があるためです。したがって、Java コンパイラの実装が異なっても \f2serialVersionUID\fP 値の一貫性を確保にするには、直列化可能クラスが \f2serialVersionUID\fP 値を明示的に宣言する必要があります。  
.TP 3
static 
static の使用に関する問題について警告します。次に例を示します。 
.nf
\f3
.fl
class XLintStatic {
.fl
    static void m1() { }
.fl
    void m2() { this.m1(); }
.fl
}
.fl
\fP
.fi
.LP
コンパイラは次の警告を生成します。 
.nf
\f3
.fl
warning: [static] static method should be qualified by type name, XLintStatic, instead of by an expression
.fl
\fP
.fi
.LP
この問題を解決するために、次のように static メソッド \f2m1\fP を呼び出すことができます。 
.nf
\f3
.fl
XLintStatic.m1();
.fl
\fP
.fi
.LP
あるいは、 \f2static\fP キーワードをメソッド \f2m1\fP の宣言から削除することもできます。  
.TP 3
try 
try\-with\-resources 文を含む、 \f2try\fP ブロックの使用に関する問題について警告します。たとえば、try 文で宣言されたリソース \f2ac\fP が使用されないために、 \f2次の文に対して警告が\fP 生成されます。 
.nf
\f3
.fl
try ( AutoCloseable ac = getResource() ) {
.fl
    // do nothing
.fl
}
.fl
\fP
.fi
.TP 3
unchecked 
Java 言語仕様で指定されている未検査変換警告の詳細を示します。次に例を示します。 
.nf
\f3
.fl
    List l = new ArrayList<Number>();
.fl
    List<String> ls = l;       // unchecked warning
.fl
\fP
.fi
.LP
型の消去中に、型 \f2ArrayList<Number>\fP および \f2List<String>\fP はそれぞれ \f2ArrayList\fP および \f2List\fP になります。 
.LP
変数 \f2ls\fP にはパラメータ化された型 \f2List<String>\fP が指定されています。l によって参照される \f2List\fP \f2が\fP \f2ls\fP に代入されると、コンパイラは未検査警告を生成します。コンパイラは \f2l\fP が \f2List<String>\fP 型を参照するかどうかをコンパイル時に判断できません。また、JVM が実行時にそれを判断できないことも認識しています。l は List<String> 型を参照しません。その結果、ヒープ汚染が発生します。 
.LP
詳しく説明すると、ヒープ汚染状態が発生するのは、 \f2List\fP オブジェクト \f2l\fP (その static 型は \f2List<Number>\fP) が別の \f2List\fP オブジェクト \f2ls\fP (異なる static 型 \f2List<String>\fP を持つ) に代入される場合です。しかし、コンパイラではこの代入を未だに許可しています。総称をサポートしない Java SE のバージョンとの下位互換性を確保するために、この代入を許可する必要があります。型消去のために、 \f2List<Number>\fP と \f2List<String>\fP は \f2List\fP になります。その結果、コンパイラはオブジェクト \f2l\fP ( \f2List\fP という raw 型を持つ) をオブジェクト \f2ls\fPに代入することを許可します。  
.TP 3
varargs 
可変引数 (varargs) メソッド、特に非具象化可能引数を含むものの使用が安全でないことを警告します。次に例を示します。 
.nf
\f3
.fl
public class ArrayBuilder {
.fl
  public static <T> void addToList (List<T> listArg, T... elements) {
.fl
    for (T x : elements) {
.fl
      listArg.add(x);
.fl
    }
.fl
  }
.fl
}
.fl
\fP
.fi
.LP
コンパイラは、メソッド \f2ArrayBuilder.addToList\fP の定義に関する次の警告を生成します。 
.nf
\f3
.fl
warning: [varargs] Possible heap pollution from parameterized vararg type T
.fl
\fP
.fi
.LP
コンパイラは、varargs メソッドを検出すると、varargs の仮パラメータを配列に変換します。しかし、Java プログラミング言語では、パラメータ化された型の配列の作成を許可していません。メソッド \f2ArrayBuilder.addToList\fP では、コンパイラは varargs の仮パラメータ \f2T... elements\fP を仮パラメータ \f2T[] elements\fP(配列) に変換します。しかし、型消去のために、コンパイラは varargs の仮パラメータを \f2Object[] elements\fP に変換します。その結果、ヒープ汚染が発生する可能性があります。  
.RE

.LP
.SH "コマンド行引数ファイル"
.LP
.LP
javac のコマンド行を短くしたり簡潔にしたりするために、 \f2javac\fP コマンドに対する引数 ( \f2\-J\fP オプションを除く) を含む 1 つ以上のファイルを指定することができます。この方法を使うと、どのオペレーティングシステム上でも、任意の長さの javac コマンドを作成できます。
.LP
.LP
引数ファイルには、javac のオプションとソースファイル名を自由に組み合わせて記述できます。ファイル内の各引数は、スペースまたは改行で区切ります。ファイル名に空白が含まれている場合は、そのファイル名全体を二重引用符で囲みます。
.LP
.LP
引数ファイル内のファイル名は、現在のディレクトリから見た相対パスになります。引数ファイルの位置から見た相対パスではありません。引数ファイル内のファイル名リストでは、ワイルドカード (*) は使用できません。たとえば、 \f2*.java\fP とは指定できません。引数ファイル内の引数で \f2@\fP 文字を使用して、複数のファイルを再帰的に解釈することはサポートされていません。また、 \f2\-J\fP オプションもサポートされていません。このオプションは起動ツールに渡されますが、起動ツールでは引数ファイルをサポートしていないからです。
.LP
.LP
javac を実行するときに、各引数ファイルのパスとファイル名の先頭に \f2@\fP 文字を付けて渡します。javac は、\f2@\fP 文字で始まる引数を見つけると、そのファイルの内容を展開して引数リストに挿入します。
.LP
.SS 
引数ファイルを 1 つ指定する例
.LP
.LP
\f2「argfile」という名前の引数ファイルに\fPすべての javac 引数を格納する場合は、次のように指定します。
.LP
.nf
\f3
.fl
% \fP\f3javac @argfile\fP
.fl
.fi

.LP
.LP
この引数ファイルには、次の例で示されている 2 つのファイルの内容を両方とも入れることができます。
.LP
.SS 
引数ファイルを 2 つ指定する例
.LP
.LP
たとえば、javac オプション用に 1 ファイル、ソースファイル名用に 1 ファイルというように、2 つの引数ファイルを作成することもできます。なお、このあとのリストでは、行の継続文字を使用していません。
.LP
.LP
以下の内容を含む \f2options\fP というファイルを作成します。
.LP
.nf
\f3
.fl
     \-d classes
.fl
     \-g
.fl
     \-sourcepath /java/pubs/ws/1.3/src/share/classes
.fl

.fl
\fP
.fi

.LP
.LP
以下の内容を含む \f2classes\fP というファイルを作成します。
.LP
.nf
\f3
.fl
     MyClass1.java
.fl
     MyClass2.java
.fl
     MyClass3.java
.fl

.fl
\fP
.fi

.LP
.LP
次のコマンドを使用して \f3javac\fP を実行します。
.LP
.nf
\f3
.fl
  % \fP\f3javac @options @classes\fP
.fl

.fl
.fi

.LP
.SS 
パス付きの引数ファイルの例
.LP
.LP
引数ファイルには、パスを指定できます。ただし、そのファイル内に指定されたファイル名は、現在の作業ディレクトリから見た相対パスになります。つまり、下の例の場合は、 \f2path1\fP や \f2path2\fP から見た相対パスではありません。
.LP
.nf
\f3
.fl
% \fP\f3javac @path1/options @path2/classes\fP
.fl
.fi

.LP
.SH "注釈処理"
.LP
.LP
\f3javac\fP が注釈処理を直接サポートしているため、独立した注釈処理ツールである \f3apt\fP を使用する必要がなくなりました。
.LP
.LP
注釈処理の API は、 \f2javax.annotation.processing\fP および \f2javax.lang.model\fP パッケージとそのサブパッケージ内に定義されています。
.LP
.SS 
注釈処理の概要
.LP
.LP
\f3\-proc:none\fP オプションによって注釈処理が無効化されないかぎり、コンパイラは使用可能なすべての注釈プロセッサを検索します。検索パスは \f3\-processorpath\fP オプションを使って指定できます。検索パスを指定しなかった場合は、ユーザークラスパスが使用されます。プロセッサの検索は、検索パス上の \f2META\-INF/services/javax.annotation.processing.Processor\fP という名前のサービスプロバイダ構成ファイルに基づいて行われます。このようなファイルには、使用するすべての注釈プロセッサの名前を、1 行に 1 つずつ含めてください。また、別の方法として、\f3\-processor\fP オプションを使ってプロセッサを明示的に指定することもできます。
.LP
.LP
コンパイラは、コマンド行のソースファイルやクラスを走査することで、どのような注釈が存在しているかを確認し終わると、プロセッサに対して問い合わせを行い、それらのプロセッサがどの注釈を処理できるのかを確認します。一致するものが見つかった場合、そのプロセッサが呼び出されます。各プロセッサは、自身が処理する注釈を「要求」できます。その場合、それらの注釈に対する別のプロセッサを見つける試みは行われません。すべての注釈が要求されてしまうと、コンパイラはそれ以上プロセッサの検索を行いません。
.LP
.LP
いずれかのプロセッサによって新しいソースファイルが生成されると、注釈処理の 2 回目のラウンドが開始されます。新しく生成されたすべてのソースファイルが走査され、前回と同様に注釈が処理されます。以前のラウンドで呼び出されたプロセッサはすべて、後続のどのラウンドでも呼び出されます。これが、新しいソースファイルが生成されなくなるまで続きます。
.LP
.LP
あるラウンドで新しいソースファイルが生成されなかった場合、注釈プロセッサがあと 1 回だけ呼び出され、必要な処理を実行する機会が与えられます。最後に、\f3\-proc:only\fP オプションが使用されないかぎり、コンパイラは、元のソースファイルと生成されたすべてのソースファイルをコンパイルします。
.LP
.SS 
暗黙的にロードされたソースファイル
.LP
.LP
コンパイラは、一連のソースファイルをコンパイルする際に、別のソースファイルを暗黙的にロードすることが必要な場合があります (「型の検索」を参照)。そのようなファイルは、現時点では注釈処理の対象になりません。デフォルトでは、注釈処理が実行され、かつ暗黙的にロードされたソースファイルが 1 つでもコンパイルされた場合にコンパイラは警告を発行します。この警告を抑制する方法については、\-implicit オプションを参照してください。
.LP
.SH "型の検索"
.LP
.LP
ソースファイルをコンパイルする場合、コマンド行で指定したソースファイルに型の定義が見つからないとき、コンパイラは通常、その型に関する情報を必要とします。コンパイラは、ソースファイルで使われているクラスまたはインタフェース、拡張されているクラスまたはインタフェース、あるいは実装されているクラスまたはインタフェースすべてについて、型の情報を必要とします。これには、ソースファイルで明示的には言及されていなくても、継承を通じて情報を提供するクラスとインタフェースも含まれます。
.LP
.LP
たとえば、\f3java.applet.Applet\fP をサブクラスにした場合、\f3アプレットの\fP祖先のクラス(\f3java.awt.Panel\fP、\f3java.awt.Container\fP、\f3java.awt.Component\fP、\f3java.lang.Object\fP)を使用していることになります。
.LP
.LP
コンパイラは、型の情報が必要になると、その型を定義しているソースファイルまたはクラスファイルを探します。まず、ブートストラップクラスと拡張機能クラスを検索し、続いてユーザークラスパス (デフォルトではカレントディレクトリ) を検索します。ユーザークラスパスは、\f3CLASSPATH\fP 環境変数を設定して定義するか、または \f3\-classpath\fP コマンド行オプションを使って設定します。詳細は、「クラスパスの設定」を参照してください。
.LP
.LP
\-sourcepath オプションが指定されている場合、コンパイラは、指定されたパスからソースファイルを検索します。それ以外の場合は、ユーザークラスパスからクラスファイルとソースファイルの両方を検索します。
.LP
.LP
\f3\-bootclasspath\fP オプションと \f3\-extdirs\fP オプションを使うと、別のブートストラップクラスや拡張機能クラスを指定できます。このあとの「クロスコンパイルオプション」を参照してください。
.LP
.LP
型の検索に成功したときに得られる結果は、クラスファイル、ソースファイル、またはその両方である場合があります。両方が見つかった場合、そのどちらを使用すべきかを \-Xprefer オプションでコンパイラに指示できます。\f3newer\fP が指定された場合、コンパイラは 2 つのファイルの新しい方を使用します。\f3source\fP が指定された場合、コンパイラはソースファイルを使用します。デフォルトは \f3newer\fP です。
.LP
.LP
型の検索自体によって、または \f3\-Xprefer\fP が設定された結果として必要な型のソースファイルが見つかった場合、コンパイラはそのソースファイルを読み取り、必要な情報を取得します。さらに、コンパイラはデフォルトで、そのソースファイルのコンパイルも行います。\-implicit オプションを使えばその動作を指定できます。\f3none\fP を指定した場合、そのソースファイルのクラスファイルは生成されません。\f3class\fP を指定した場合、そのソースファイルのクラスファイルが生成されます。
.LP
.LP
コンパイラは、注釈処理の完了後に、ある型情報の必要性を認識しない場合があります。その型情報があるソースファイル内に見つかり、かつ \f3\-implicit\fP オプションが指定されていない場合は、そのファイルが注釈処理の対象とならずにコンパイルされることを、コンパイラがユーザーに警告します。この警告を無効にするには、(そのファイルが注釈処理の対象となるように) そのファイルをコマンド行に指定するか、あるいはそのようなソースファイルに対してクラスファイルを生成すべきかどうかを \f3\-implicit\fP オプションを使って指定します。
.LP
.SH "プログラマティックインタフェース"
.LP
.LP
\f3javac\fP は、 \f2javax.tools\fP パッケージ内のクラスとインタフェースによって定義される新しい Java Compiler API をサポートします。
.LP
.SS 

.LP
.LP
コマンド行から指定された引数を使ってコンパイルを実行するには、次のようなコードを使用します。
.LP
.nf
\f3
.fl
JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
.fl
int rc = javac.run(null, null, null, args);
.fl
\fP
.fi

.LP
.LP
この場合、標準出力ストリームにすべての診断メッセージが書き出され、コマンド行から呼び出された \f3javac\fP が返すのと同じ終了コードが返されます。
.LP
.LP
\f2javax.tools.JavaCompiler\fP インタフェース上のほかのメソッドを使えば、診断メッセージの処理やファイルの読み取り元/書き込み先の制御などを行えます。
.LP
.SS 
旧式のインタフェース
.LP
.LP
\f3注:\fP この API は、下位互換性を確保するためだけに残されています。新しいコードでは、必ず前述の Java Compiler API を使用してください。
.LP
.LP
\f2com.sun.tools.javac.Main\fP クラスには、プログラム内からコンパイラを呼び出すための static メソッドが 2 つ用意されています。それらを次に示します。
.LP
.nf
\f3
.fl
public static int compile(String[] args);
.fl
public static int compile(String[] args, PrintWriter out);
.fl
\fP
.fi

.LP
.LP
\f2args\fP パラメータは、javac プログラムに通常渡される任意のコマンド行引数を表しています。その概要については、前出の「形式」節を参照してください。
.LP
.LP
\f2out\fP パラメータは、コンパイラの診断メッセージの出力先を示します。
.LP
.LP
戻り値は、\f3javac\fP の終了値と同じです。
.LP
.LP
名前が \f2com.sun.tools.javac\fP で始まるパッケージ (非公式には \f2com.sun.tools.javac\fP のサブパッケージとして知られる) に含まれるその他のクラスやメソッドは、どれも完全に内部用であり、いつでも変更される可能性があります。
.LP
.SH "例"
.LP
.SS 
簡単なプログラムのコンパイル
.LP
.LP
\f2Hello.java\fP というソースファイルで、\f3greetings.Hello\fP という名前のクラスを定義しているとします。 \f2greetings\fP ディレクトリは、ソースファイルとクラスファイルの両方があるパッケージディレクトリで、現在のディレクトリのすぐ下にあります。このため、この例では、デフォルトのユーザークラスパスを使用できます。また、\f3\-d\fP を使って別の出力先ディレクトリを指定する必要もありません。
.LP
.nf
\f3
.fl
% \fP\f3ls\fP
.fl
greetings/
.fl
% \f3ls greetings\fP
.fl
Hello.java
.fl
% \f3cat greetings/Hello.java\fP
.fl
package greetings;
.fl

.fl
public class Hello {
.fl
    public static void main(String[] args) {
.fl
        for (int i=0; i < args.length; i++) {
.fl
            System.out.println("Hello " + args[i]);
.fl
        }
.fl
    }
.fl
}
.fl
% \f3javac greetings/Hello.java\fP
.fl
% \f3ls greetings\fP
.fl
Hello.class   Hello.java
.fl
% \f3java greetings.Hello World Universe Everyone\fP
.fl
Hello World
.fl
Hello Universe
.fl
Hello Everyone
.fl
.fi

.LP
.SS 
複数のソースファイルのコンパイル
.LP
.LP
次の例では、パッケージ \f2greetings\fP 内のすべてのソースファイルをコンパイルします。
.LP
.nf
\f3
.fl
% \fP\f3ls\fP
.fl
greetings/
.fl
% \f3ls greetings\fP
.fl
Aloha.java         GutenTag.java      Hello.java         Hi.java
.fl
% \f3javac greetings/*.java\fP
.fl
% \f3ls greetings\fP
.fl
Aloha.class         GutenTag.class      Hello.class         Hi.class
.fl
Aloha.java          GutenTag.java       Hello.java          Hi.java
.fl
.fi

.LP
.SS 
ユーザークラスパスの指定
.LP
.LP
上の例のソースファイルのうち 1 つを変更し、変更後のファイルを再コンパイルするとします。
.LP
.nf
\f3
.fl
% \fP\f3pwd\fP
.fl
/examples
.fl
% \f3javac greetings/Hi.java\fP
.fl
.fi

.LP
.LP
\f2greetings.Hi\fP は、 \f2greetings\fP パッケージ内のほかのクラスを参照しているため、コンパイラはこれらのクラスを探す必要があります。上の例では、デフォルトのユーザークラスパスが、パッケージディレクトリを含むディレクトリと同じであるため、コンパイルは正常に実行されます。ただし、現在どのディレクトリにいるかに関係なく、このファイルを再コンパイルする場合は、ユーザークラスパスに \f2/examples\fP を追加する必要があります。ユーザークラスパスにエントリを追加するには、\f3CLASSPATH\fP を設定する方法もありますが、ここでは \f3\-classpath\fP オプションを使うことにします。
.LP
.nf
\f3
.fl
% \fP\f3javac \-classpath /examples /examples/greetings/Hi.java\fP
.fl
.fi

.LP
.LP
再度 \f2greetings.Hi\fP を変更してバナーユーティリティーを使うようにした場合は、このバナーユーティリティーもユーザークラスパスを通じてアクセスできるようになっている必要があります。
.LP
.nf
\f3
.fl
% \fP\f3javac \-classpath /examples:/lib/Banners.jar \\ 
.fl
            /examples/greetings/Hi.java\fP
.fl
.fi

.LP
.LP
\f2greetings\fP 内のクラスを実行するには、 \f2greetings\fP と、それが使うクラスの両方にアクセスできる必要があります。
.LP
.nf
\f3
.fl
% \fP\f3java \-classpath /examples:/lib/Banners.jar greetings.Hi\fP
.fl
.fi

.LP
.SS 
ソースファイルとクラスファイルの分離
.LP
.LP
特に大規模プロジェクトの場合は、ソースファイルとクラスファイルを別々のディレクトリに置くと便利なことがあります。クラスファイルの出力先を別に指定するには、\f3\-d\fP を使います。ソースファイルはユーザークラスパスにはないので、\f3\-sourcepath\fP を使って、コンパイラがソースファイルを見つけることができるようにします。
.LP
.nf
\f3
.fl
% \fP\f3ls\fP
.fl
classes/  lib/      src/
.fl
% \f3ls src\fP
.fl
farewells/
.fl
% \f3ls src/farewells\fP
.fl
Base.java      GoodBye.java
.fl
% \f3ls lib\fP
.fl
Banners.jar
.fl
% \f3ls classes\fP
.fl
% \f3javac \-sourcepath src \-classpath classes:lib/Banners.jar \\ 
.fl
            src/farewells/GoodBye.java \-d classes\fP
.fl
% \f3ls classes\fP
.fl
farewells/
.fl
% \f3ls classes/farewells\fP
.fl
Base.class      GoodBye.class
.fl
.fi

.LP
.LP
\f3注:\fP コマンド行では \f2src/farewells/Base.java\fP を指定していませんが、このファイルもコンパイラによってコンパイルされています。自動コンパイルを監視するには、\f3\-verbose\fP オプションを使います。
.LP
.SS 
クロスコンパイルの例
.LP
.LP
ここでは、\f3javac\fP を使って、1.6 VM 上で実行するコードをコンパイルします。
.LP
.nf
\f3
.fl
% \fP\f3javac \-source 1.6 \-target 1.6 \-bootclasspath jdk1.6.0/lib/rt.jar \\ 
.fl
            \-extdirs "" OldCode.java\fP
.fl
.fi

.LP
.LP
\f2\-source 1.6\fP オプションにより、 \f2OldCode.java\fP のコンパイルにはバージョン 1.6 (または 6) の Java プログラミング言語が使用されます。\f3\-target 1.6\fP オプションにより、1.6 VM と互換性のあるクラスファイルが生成されます。ほとんどの場合、\f3\-target\fP オプションの値は \f3\-source\fP オプションの値になります。この例では、\f3\-target\fP オプションを省略できます。
.LP
.LP
\f3\-bootclasspath\fP オプションを使用して、適切なバージョンのブートストラップクラス ( \f2rt.jar\fP ライブラリ) を指定する必要があります。指定しない場合は、コンパイラによって次の警告が生成されます。
.LP
.nf
\f3
.fl
% \fP\f3javac \-source 1.6 OldCode.java\fP
.fl
warning: [options] bootstrap class path not set in conjunction with \-source 1.6
.fl
.fi

.LP
.LP
適切なバージョンのブートストラップクラスを指定しない場合、コンパイラは古い言語仕様 (この例では、バージョン 1.6 の Java プログラミング言語) を新しいブートストラップクラスと組み合わせて使用します。その結果、存在しないメソッドへの参照が含まれていることがあるため、クラスファイルが古いプラットフォーム (この場合は Java SE 6) で動作しない可能性があります。
.LP
.SH "関連項目"
.LP
.RS 3
.TP 2
o
.na
\f2「The javac Guide」\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/javac/index.html 
.TP 2
o
「java(1) \- Java アプリケーション起動ツール」 
.TP 2
o
「jdb(1) \- Java デバッガ」 
.TP 2
o
「javah(1) \- C ヘッダーとスタブファイルジェネレータ」 
.TP 2
o
「javap(1) \- クラスファイル逆アセンブラ」 
.TP 2
o
「javadoc(1) \- Java API ドキュメントジェネレータ」 
.TP 2
o
「jar(1) \- JAR アーカイブツール」 
.TP 2
o
.na
\f2「Java 拡張機能フレームワーク」\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/extensions/index.html 
.RE

.LP