―Javaプログラミングの前提知識―

前田俊行
2001/5/12
Javaプログラミング
ワンポイントレクチャーについて

   クラスパスを使わずクラスライブラリを利用する
  ―エクステンション(拡張)メカニズム―

今回の内容

エクステンションメカニズムの種類
(1)インストール拡張

(2)ダウンロード拡張

 エクステンション(拡張)メカニズムとは、クラスライブラリ(ある特定の目的に利用できるクラスの集まりのこと)を、クラスパスに指定せずに利用するためのメカニズムです。

 エクステンションメカニズムが登場する前は、クラスライブラリを利用するアプリケーションは、あらかじめ、どのクラスライブラリを利用するかを調べ、そのクラスライブラリの位置を調べ、それらのクラスライブラリをクラスパスに指定しなければなりませんでした。この作業は、クラスライブラリが少ないうちはよいのですが、利用するクラスライブラリが多いと非常に面倒なことになります。エクステンションメカニズムを用いることで、この面倒なクラスパスの設定を回避することができます。

 エクステンションメカニズムの種類

  エクステンションメカニズムにはインストール拡張とダウンロード拡張の2種類があります。ここでは、まずインストール拡張について説明し、 次にダウンロード拡張について説明します。

(1)インストール拡張

 インストール拡張とは、 Javaの実行環境に、新たにクラスライブラリを追加する機能のことです。追加されたクラスライブラリは、 あたかも標準クラスライブラリであるかのように、クラスパスを指定しなくてもアプリケーションから利用することができます。もちろんjavacなどでもクラスパスを指定せずに利用できます。Java VMが具体的にどのようにクラスを見つけるかについては、「クラスパス(class path)を正しく使う」を参照してください。

 インストール拡張を行うためには、JARファイルとしてまとめてあるクラスライブラリを、“ある特定のディレクトリ”に置きます。これだけで、そのクラスライブラリはクラスパスを指定しなくても、アプリケーションから利用することができます。以下では、その“ある特定のディレクトリ”について説明します。

 ある特定のディレクトリとは、Java 2 SDKがインストールされているディレクトリ下のディレクトリjre\lib\extを指します。仮にJava 2 SDKをディレクトリC:\jdk1.3にインストールしたとすると、ディレクトリC:\jdk1.3\jre\lib\extとなります。

 このディレクトリにJARファイルを置けばよいのです、が、ここにちょっとした落とし穴があります。実は、Java 2 SDK Standard Editionをインストールすると、同時にJava 2 Runtime Environment Standard Edition(JRE)というJavaの実行環境がディレクトリC:\Program Files\JavaSoft\JRE\<バージョン番号>\以下にインストールされます。このJREのインストール拡張のためのディレクトリは、C:\Program Files\JavaSoft\JRE\<バージョン番号>\lib\extとなります。このため、こちらのディレクトリにもJARファイルを置く必要があります。ちなみに、javaコマンドを実行すると、通常それはJREのjavaコマンドを実行したことになります。そのため、エクステンションメカニズムによって検索されるディレクトリはC:\Program Files\JavaSoft\JRE\<バージョン番号>\lib\extとなります。一方、javacコマンドを実行すると、それはJava 2 SDKのjavaコマンドを内部で実行します。そのため、エクステンションメカニズムによって検索されるディレクトリは、仮にJava 2 SDKをディレクトリC:\jdk1.3にインストールしたとすると、C:\jdk1.3\jre\lib\extとなります。このため、もしどちらかのディレクトリにしかJARファイルを置かないと、「実行できるけどコンパイルできない」とか「コンパイルできるけど実行できない」などの不可思議な現象が起こりますので注意してください。

(2)ダウンロード拡張

 ダウンロード拡張とは、あるJARファイル中のクラスで使われているクラスライブラリを、自動的にクラスパスに追加できる機能のことです。具体的には、クラスライブラリの作成者は、作成するJARファイル中に、そのJARファイル中のクラスで利用されるクラスライブラリのクラスパスを記述します。Java VMは、そのJARファイル中のクラスを読み込むときに、そのJARファイルに指定してあるクラスパスを、自動的にクラスの検索場所に追加します。このため、そのクラスライブラリを利用する場合に、よけいなクラスパスを設定する必要がなくなります。

 ダウンロード拡張は、アプレットを複数のJARファイルで実現するときに用います。また、クラスライブラリのユーザーによるクラスパスの設定の手間を省くためにも用います。

 インストール拡張と比べて、ダウンロード拡張はあまり使われていないようなので、ここではこれ以上の説明は省略します。

Javaプログラミング・ワンポイントレクチャー INDEX





Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間