―Javaプログラミングの前提知識―
2001/5/12
クラスパスを使わずクラスライブラリを利用する ―エクステンション(拡張)メカニズム― |
今回の内容
|
エクステンション(拡張)メカニズムとは、クラスライブラリ(ある特定の目的に利用できるクラスの集まりのこと)を、クラスパスに指定せずに利用するためのメカニズムです。
エクステンションメカニズムが登場する前は、クラスライブラリを利用するアプリケーションは、あらかじめ、どのクラスライブラリを利用するかを調べ、そのクラスライブラリの位置を調べ、それらのクラスライブラリをクラスパスに指定しなければなりませんでした。この作業は、クラスライブラリが少ないうちはよいのですが、利用するクラスライブラリが多いと非常に面倒なことになります。エクステンションメカニズムを用いることで、この面倒なクラスパスの設定を回避することができます。
エクステンションメカニズムの種類 |
エクステンションメカニズムにはインストール拡張とダウンロード拡張の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ファイルで実現するときに用います。また、クラスライブラリのユーザーによるクラスパスの設定の手間を省くためにも用います。
インストール拡張と比べて、ダウンロード拡張はあまり使われていないようなので、ここではこれ以上の説明は省略します。
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|