クラスパスの設定は、SDK ツールを呼び出すときに-classpath
オプションを付ける方法 (この方法が望ましい) か、CLASSPATH
環境変数を設定する方法により行います。-classpath
オプションを推奨しているのは、各アプリケーションに対して個別に設定でき、ほかのアプリケーションに影響したり、ほかのアプリケーションからこの値が変更されたりすることがないためです。
C:>
sdkTool-classpath
path1;
path2...-または-
C:> set CLASSPATH=
path1;
path2...説明
- sdkTool
- コマンド行ツール (
java
、javac
、javadoc
など) です。 SDK ツールの一覧は、「Java 2 SDK ツールとユーティリティ」 を参照してください。
- path1
;
path2- .jar、.zip、または .class ファイルのパスです。 各パスの末尾は、ファイル名かディレクトリのどちらかで、これはクラスパスを設定する対象によって異なります。
- .class ファイルを含む .jar または .zip ファイルの場合、パスは .zip または .jar ファイルの名前で終わります。
- 名前のないパッケージ内の .class ファイルの場合、パスは .class ファイルを含むディレクトリ名で終わります。
- 名前付きのパッケージ内の .class ファイルの場合、パスはルートパッケージ (絶対パスで指定されたパッケージ名の先頭パッケージ) を含むディレクトリ名で終わります。
複数のパスエントリがある場合は、セミコロンで区切ります。
set
コマンドでは、等号 (=) の前後に空白を入れないように注意してください。デフォルトのクラスパスは、現在のディレクトリです。 このデフォルトは、
CLASSPATH
変数を設定したり、-classpath
コマンド行オプションを使用すると無効になります。 そのため、検索パスに現在のディレクトリを含める場合には、新しい設定に「.」を含める必要があります。ディレクトリおよびアーカイブ (.zip または .jar ファイル) 以外のクラスパスエントリは、無視されます。
クラスパスは SDK ツールおよび Java アプリケーションに対して、サードパーティ製およびユーザ定義のクラス、つまり Java 拡張機能や Java プラットフォームの一部ではないクラスを探す位置を通知します。 クラスパスでは、javac コンパイラでコンパイルされたすべてのクラスを検出する必要があります。簡単に検出できるように、デフォルトはカレントディレクトリになっています。
Java 2 SDK、JVM、およびその他の SDK ツールでは、Java プラットフォーム (ブートストラップ) のクラス、拡張機能のクラス、クラスパスの順序でクラスが検索されます。 検索についての詳細は、「クラスの検索方法」を参照してください。 ほとんどのアプリケーションのクラスライブラリでは、Java 拡張機能機構の利用が望まれます。 これを利用することにより、(a) 現在のディレクトリまたはそのサブディレクトリ内にないクラス、または (b) 拡張機能機構によって指定された位置にないクラスをロードする場合に、単にクラスパスを設定するだけで済みます。
旧バージョンの SDK をアップグレードする場合は、起動設定に、不要になった
CLASSPATH
環境変数の設定が含まれています。 このため、classes.zip
などのアプリケーション固有でない設定は、すべて削除する必要があります。 Java Virtual Machine を使うサードパーティ製アプリケーションには、使用するライブラリを取り込むためにCLASSPATH
環境変数を修正するものがあります。 このような設定は残しておいてもかまいません。クラスパスを変更するときは、JVM またはほかの SDK ツールを起動するときに、SDK ツールの -classpath オプションまたは
CLASSPATH
環境変数を使用します。CLASSPATH
環境変数よりも-classpath
オプションを使用することをお勧めします。各アプリケーションに対して個別に設定でき、ほかのアプリケーションに影響したり、ほかのアプリケーションからこの値が変更されたりすることがないためです。クラスは、ディレクトリ (フォルダ) またはアーカイブファイルに格納できます。 Java プラットフォームのクラスは、
rt.jar
に格納されています。アーカイブの詳細およびクラスパスの機能については、「クラスパスとパッケージ名」を参照してください。
- 重要: 旧バージョンの JDK ソフトウェアには、デフォルトのクラスパスに
<
jdk-dir>/classes
エントリが含まれているものがあります。 このディレクトリは JDK ソフトウェアが使用するためのもので、アプリケーションクラスのために使用すべきではありません。 アプリケーションクラスは、JDK ディレクトリ階層の外部のディレクトリに置くべきです。 そうすれば、新しい JDK をインストールするときにアプリケーションのクラスを再インストールする必要はありません。 旧バージョンとの互換性を確保するため、<
jdk-dir>/classes
ディレクトリをクラスライブラリとして使用するアプリケーションは、現在のバージョンでは実行できます。 ただし、将来のバージョンでも実行できるという保証はありません。
SDK ツール java、jdb、javac、javah には
-classpath
オプションがあります。 このオプションはツールの実行中、CLASSPATH
環境変数によって指定された 1 つまたは複数のパスを別のパスに置き換えます。 クラスパスの設定を変更する方法としては、この方法をお勧めします。 その理由は、アプリケーションが他のアプリケーションに影響を与えずに、自分に必要なクラスパスを持つことができるからです。実行時ツール java と jdb には
-cp
オプションがあります。 このオプションは、-classpath
の省略形です。ごく特殊なケースのために、java と javac には、ツール自体のクラスライブラリ検索用パスを変更するためのオプションがあります。 しかし、ほとんどのユーザはこのオプションを使う必要はありません。
前述したように、クラスパスの変更には通常、
-classpath
コマンド行オプションを使用します。 ここでは、CLASSPATH
環境変数の設定が必要な場合に、それを行う方法と、旧バージョンのインストール時から残っている設定を解除する方法を説明します。CLASSPATH の設定
CLASSPATH
環境変数は、set コマンドを使って変更します。 コマンドの形式は、次のとおりです。
set CLASSPATH=
path1;
path2...パスは、
C:\
のようにドライブ指定の文字で始まります。 こうすると、現在のドライブを別のドライブに切り替えても、クラスを見つけることができます (パスのエントリが\
で始まると、現在のドライブがD:
であれば、クラスはC:
ではなくD:
にあるとみなされる)。CLASSPATH の設定解除
CLASSPATH
環境変数に設定されている値が正しくない場合や、起動ファイルやスクリプトに不正なパスが設定されている場合には、次のコマンドでCLASSPATH
の設定を解除することができます。
C:> set CLASSPATH=
このコマンドは、現在のコマンドプロンプトウィンドウに対してだけ
CLASSPATH
の設定を解除します。 次回以降のセッションでも正しいCLASSPATH
の設定を保持するには、起動設定を削除または修正する必要があります。起動設定の変更
CLASSPATH
環境変数がシステムの起動時に設定される場合は、変更方法はオペレーティングシステムによって異なります。
オペレーティングシステム 手順 Windows 95 および 98 autoexec.bat ファイル内の set コマンドが記述されている箇所を探す Windows NT コントロールパネルを開いて [システム] を選択し、[環境] タブをクリックして [ユーザ環境変数] 内の CLASSPATH
変数を調べる
Java のクラスはパッケージ内に整理されており、パッケージはファイルシステム内のディレクトリに割り当てられています。 しかし、ファイルシステムとは異なり、パッケージ名を指定するときは必ずパッケージ名の一部ではなく全体を指定します。 たとえば、
java.awt.Button
のパッケージ名には、必ずjava.awt
と指定する必要があります。たとえば、Java Runtime が
utility.myapp
パッケージ 内のCool.class
という名前のクラスを探すように設定する場合を考えてみます。 そのディレクトリへのパスがC:\java\MyClasses\utility\myapp
であれば、C:\java\MyClasses
を含むようにクラスパスを設定します。このアプリケーションを実行するには、次の JVM コマンドを使用できます。
C:> java -classpath C:\java\MyClasses utility.myapp.Cool
アプリケーションを実行すると、JVM はクラスパスの設定を使って、
utility.myapp
パッケージ内に定義されている、Cool
クラスが使用する他のクラスを検索します。コマンドの中で完全なパッケージ名が指定されていることに注意してください。 たとえば、クラスパスに
C:\java\MyClasses\utility
を含めて設定している場合、コマンドjava myapp.Cool
を使用することはできません。 実行しても、クラスを見つけることはできないからです。クラスのパッケージ名はクラスの一部なので、クラスをコンパイルし直さない限り変更できません。
注: パッケージ指定のメカニズムでは、「あるパッケージの一部であるファイルが、実際には別のディレクトリに存在する」ことがあります。 この場合、各クラスのパッケージ名は同じになりますが、それぞれのファイルへのパスは、クラスパス内の別々のディレクトリで始まります。
フォルダとアーカイブファイル
クラスが
c:\java\MyClasses\utility\myapp
のようなディレクトリ (フォルダ) に格納されている場合、そのクラスパスのエントリはパッケージ名の先頭の要素を格納されているディレクトリを指します。 この場合は、パッケージ名がutility.myapp
なので、C:\java\MyClasses
を指します。しかしクラスがアーカイブファイル (.zip ファイルまたは .jar ファイル) 内に格納されている場合、クラスパスのエントリは .zip ファイルまたは .jar ファイルへのパスとなり、これらのファイルを含んでいます。 たとえば、.jar ファイル内のクラスライブラリを使用するには、次のようなコマンドを使用します。
C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
複数指定
ディレクトリ
C:\java\MyClasses
の中のクラスとC:\java\OtherClasses
の中のクラスを検索するには、クラスパスを次のように設定します。C:> java -classpath C:\java\MyClasses;C:\java\OtherClasses ...
2 つのパスをセミコロンで区切ることに注意してください。
指定の順序
複数のクラスパスエントリを指定する順序は重要です。 Java インタプリタは、クラスパス変数に指定されている順にディレクトリを調べてクラスを探します。 上の例では、Java インタプリタは最初に
C:\java\MyClasses
ディレクトリ内で必要なクラスを探します。 このディレクトリ内に該当するクラス名が見つからなかった場合にだけ、インタプリタはC:\java\OtherClasses
ディレクトリの中を検索します。