クラスパスの設定

形式

クラスパスの設定は、JDK ツールに -classpath オプションを付ける方法 (この方法が望ましい) か、CLASSPATH 環境変数を設定する方法により行います。
    C:> jdkTool -classpath path1;path2... 
    C:> set CLASSPATH=path1;path2...
path の末尾は、ファイル名かディレクトリのどちらかで、これはクラスパスを設定する対象によって異なります。 複数のエントリがある場合は、セミコロンで区切ります。set コマンドでは、等号 (=) の前後に空白を入れないように注意してください。jdkTool には、javajavacjavadoc などを指定できます。JDK ツールの一覧は、「JDK ツール」 を参照してください。

解説

クラスパスは Java アプリケーションに対して、サードパーティ製およびユーザ定義クラス、つまり Java 拡張機能や Java プラットフォームの一部ではないクラスを探す位置を通知します。JDK 1.2 では、JVM およびその他の JDK ツールは、プラットフォームライブラリ、拡張機能ライブラリ、クラスパスをこの順序で検索することによりクラスを見つけます (検索手法の詳細は、「クラスの検索方法」を参照)。

ほとんどのアプリケーションのクラスライブラリでは、Java 拡張機能機構の利用が望まれます。これを利用することにより、(a) 現在のディレクトリまたは現在のディレクトリ内のパッケージにないクラスライブラリ、または (b) 拡張機能機構によって指定された位置にないクラスライブラリをロードする場合に、単にクラスパスを設定するだけで済みます。

旧バージョンの JDK をアップグレードする場合は、起動設定に、不要になった CLASSPATH 環境変数の設定が含まれています。このため、アプリケーションに特有でない設定は、すべて削除する必要があります。Java Virtual Machine を使うサードパーティ製アプリケーションには、使用するライブラリを取り込むために CLASSPATH 環境変数を修正するものがあります。このような設定は残しておいてもかまいません。

クラスパスの変更は、JVM や他の JDK ツールの起動時に Java ツールの -classpath オプションを使うことにより行えます (たとえば、java -classpath ...)。クラスパスの変更方法としては、この方法をお勧めします。また、クラスパスは CLASSPATH 環境変数を使うことによっても変更できます。

注: JDK 1.2 のデフォルトクラスパスは、現在のディレクトリです。このデフォルトは、CLASSPATH 変数を設定したり、-classpath コマンド行オプションを使用すると無効になります。そのため、検索パスに現在のディレクトリを含める場合には、新しい設定に「.」を含める必要があります。

クラスはディレクトリ (フォルダ) に保存することも、classes.zipclasses.jar などのアーカイブファイルに保存することもできます。アーカイブの詳細とクラスパスの働きについては、このドキュメントで後述する 「クラスパスとパッケージ名について」 を参照してください。

重要: 旧バージョンの JDK には、デフォルトのクラスパスに <jdk-dir>/classes エントリが含まれています。このディレクトリは JDK が使用するためのもので、アプリケーションクラスのために使用すべきではありません。アプリケーションクラスは、JDK の外部のディレクトリに置くべきです。そうすれば、新しい JDK をインストールするときにアプリケーションのライブラリを再インストールする必要はありません。旧バージョンとの互換性を確保するため、<jdk-dir>/classes ディレクトリをクラスライブラリとして使用するアプリケーションは、現在のバージョンでは実行できます。ただし、将来のバージョンでも実行できるという保証はありません。

Java ツールの -classpath オプションの使用

Java ツール javajdbjavacjavah には -classpath オプションがあります。このオプションはツールの実行中、CLASSPATH 環境変数によって指定された 1 つまたは複数のパスを別のパスに置き換えます。クラスパスの設定を変更する方法としては、この方法をお勧めします。その理由は、アプリケーションが他のアプリケーションに影響を与えずに、自分に必要なクラスパスを持つことができるからです。

実行時ツール javajdb には -cp オプションがあります。このオプションは、-classpath の省略形です。

ごく特殊なケースのために、javajavac には、ツール自体のライブラリ検索用パスを変更するためのスイッチがあります。しかし、ほとんどのユーザはこのスイッチを使う必要はありません。

CLASSPATH 環境変数の使用

上で説明したように、クラスパスの変更には通常、-classpath コマンド行オプションを使用します。ここでは、 CLASSPATH 環境変数の設定が必要な場合に、それを行う方法と、旧バージョンのインストール時から残っている設定を解除する方法を説明します。

CLASSPATH の設定

DOS プロンプトで、set コマンドを使って CLASSPATH 環境変数を修正します。コマンドの形式は、次のとおりです。

   set CLASSPATH=path1;path2 ...

パスは、C:¥... のようにドライブ指定の文字で始まります。こうすると、現在のドライブを別のドライブに切り替えても、クラスを見つけることができます (パスのエントリが ¥... で始まると、現在のドライブが D: であれば、クラスは C: ではなく D: にあるとみなされる)。

CLASSPATH の設定解除

CLASSPATH 環境変数に設定されている値が正しくない場合や、起動ファイルやスクリプトに不正なパスが設定されている場合には、次のコマンドで CLASSPATH の設定を解除することができます。

  C:> set CLASSPATH=

このコマンドは、現在のセッションに対してだけ CLASSPATH の設定を解除します。次回以降のセッションでも正しい CLASSPATH の設定を保持するには、起動設定を削除または修正する必要があります。

起動設定の変更

CLASSPATH 環境変数がシステムの起動時に設定される場合は、変更方法はオペレーティングシステムによって異なります。

オペレーティングシステム 手順
Windows 98 および
Windows 95
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 パッケージ内に定義されている他のクラスを検索します。

コマンドの中で完全なパッケージ名が指定されていることに注意してください。たとえば、クラスパスに C:¥java¥MyClasses¥utility を含めて設定している場合、コマンド java myapp.Cool を使用することはできません。実行しても、クラスを見つけることはできないからです。

(クラスのパッケージ名を定義するものが何であるか疑問に思われるかもしれませんが、パッケージ名はクラスの一部であり、クラスを再コンパイルしない限り修正することはできません。)

注: パッケージ指定のメカニズムでは、「あるパッケージの一部であるファイルが、実際には別のディレクトリに存在する」ことがあります。この場合、各クラスのパッケージ名は同じになりますが、それぞれのファイルへのパスは、クラスパス内の別々のディレクトリで始まります。

フォルダとアーカイブファイル

クラスが c:¥java¥MyClasses¥utility¥myapp のようなディレクトリ (フォルダ) に格納されている場合、クラスパスのエントリはパッケージ名の先頭の要素を含むディレクトリ (この場合はパッケージ名が utility.myapp なので、C:¥java¥MyClasses) を指します。

しかしクラスがアーカイブファイル ( .zip ファイルまたは .jar ファイル) 内に格納されている場合、クラスパスのエントリは .zip ファイルまたは .jar ファイルへのパスになります。たとえば、.jar ファイル内のクラスライブラリを使用するには、次のようなコマンドを使用します。

   java -classpath C:¥java¥MyClasses¥myclasses.jar utility.myapp.Cool

複数指定

ディレクトリ C:¥java¥MyClasses の中のクラスと C:¥java¥OtherClasses の中のクラスを検索するには、クラスパスを次のように設定します。

   java -classpath C:¥java¥MyClasses;C:¥java¥OtherClasses ...

2 つのパスをセミコロンで区切ることに注意してください。

指定の順序

複数のクラスパスエントリを指定する順序は重要です。Java インタプリタは、クラスパス変数に指定されている順にディレクトリを調べてクラスを探します。上の例では、Java インタプリタは最初に C:¥java¥MyClasses ディレクトリ内で必要なクラスを探します。このディレクトリ内に該当するクラス名が見つからなかった場合にだけ、インタプリタは C:¥java¥OtherClasses ディレクトリの中を検索します。