Revised: May/21st/2005: Since: Jan./1st/2002
本稿ではここまで、クラスパスの設定はしないという前提で説明してきました。クラスパスを設定しない場合、JVM がクラスを探索する基準ディレクトリは、自動的にカレント・ディレクトリになります。
サードベンダーのパッケージを利用する場合や、本格的にアプリケーション開発に臨むならば、システムの CLASSPATH 変数のセットは不可欠な手順です。そうすれば、パッケージ名もディレクトリの相対パス情報ではなく、絶対的な一意的識別子として便利に利用できるようになります。
CLASSPATH 変数の設定方法は、プラットフォームによって変わります。 Linux, Win9X, WinNT ではそれぞれ設定の仕方が異なります。 詳細は、Sun Microsystems の公開している文書など確認してください:
SDK 1.4 のドキュメント
JDK 1.5 (5.0) のドキュメント
一般的な注意点として、次の二点が挙げられます:
.
" を明示的に指定しておかないと、自動的には設定されなくなります。カレントディレクトリに存在する HelloWorld が実行できなくなったなどの場合は、クラスパスにカレントディレクトリが明示的に指定されているか確認してください。CLASSPATH を環境変数で指定すると、 Java ツールだけではなく、他のツールからも一般に利用できるようになります。これでは少し危険なので、 Java ツールだけから参照するようにセットすることも出来ます。そのためには、コマンドラインツールにオプション -classpath
をつけて実行します。
>java -classpath .;C:\Java 実行クラス名
この例では、 Java インタープリタ java
がクラスファイルを探すときに、最初にカレントディレクトリを探し、無ければ次に C:\Java
を探すように設定しています。
本稿では CLASSPATH はセットしない方針で解説していますが、カレントディレクトリが先頭に来ている CLASSPATH ならば、セットしてあっても同じように動作します。
クラスパスには、ファイルシステムの絶対パスを指定します。このパスは、JVM がクラス名を完全限定名に解決するための起点となるパスです。
何も指定しない場合は、自動的にカレント・ディレクトリが指定されます。HelloWorld のように、明示的にパッケージに属さないクラスは、自動的にカレントディレクトリに属することになるので、カレントディレクトリ直下のクラスとして解決され、実行されます。
明示的にパッケージに属する場合は、パッケージ名をカレントディレクトリ配下のサブ・ディレクトリとして解釈して探索します。例えば、パッケージ "demo.myPackage
" に属するクラス "MyClass
" は、カレント・ディレクトリ配下の "./demo/myPackage/MyClass.class
" として探索されます。
明示的にクラスパスがセットされた場合は、カレント・ディレクトリが、指定されたパスに置き換えられます。複数セットされている場合は、先頭から順番に探していき、最初に見つけたものをロードします。
JAR ファイルの場合は、内部にサブディレクトリを持っているので、クラスパスにセットするのは、JAR ファイルの絶対パスになります。例えば、"demoJar.jar
" が、ディレクトリ "demo/myPackage
" を JAR 圧縮して作られているとき、"demoJar.jar
" の絶対パスをクラスパスにセットします。JVM は、クラスの探索経路に、"demoJar.jar
" を追加し、内部の "demo/myPackage
" 内部に存在するクラスを探査できるようになります。
JVM のクラスローダは、ユーザが明示的に指定するクラスパスの前に、システムで利用するディレクトリを先に探索します。例えば、java.lang
などのコア・パッケージが含まれる rt.jar
などがその例です。
アプリケーションから共通して呼ばれる環境的なパッケージ(XML パーサや JDBC ドライバなど)は、ユーザ定義のクラスパスではなく、オプションパッケージ (Optional packages) として配備するのが普通です。オプションパッケージは、Java 拡張機能機構 (Extension Mechanism Architecture) で提供されるパッケージで、Java プラットフォームを拡張する API として位置づけられます。
SEO | [PR] !uO z[y[WJ Cu | ||