単体で配布されているJREとJDKの中のJREとの違い

Javaプログラム開発環境のJDK (Java Development Kit)をWindows XPのPCにインストールしていたら、三つの疑問が沸いた。

  1. 二つのJRE (Java Runtime Environment)が存在するのだが、その違いは?
  2. javaコマンドが、パスを通していないのに、任意の場所で動作するのはなぜ?
  3. javaコマンドを実行したら、どのjava.exeが呼ばれるのか?

一つ目の疑問は、二つのJREが存在すること。どういうことかというと、

C:\Program Files\Java\jre6
C:\Program Files\Java\jdk1.6.0_20\jre

のように、二つのフォルダがある。

実際、この二つのJREは異なるものである。前者の単体で公開されているJREは「公開JRE」と呼ばれ、後者のJDKの中に含まれるJREは「非公開JRE」と呼ばれる。両者の違いは、以下のページで説明されている:

Sun Developer Network:32 ビット版 Microsoft Windows のインストール

以下、引用:

非公開 JRE と公開 JRE の違い - JDK をインストールすると、非公開 J2SE Runtime Environment (JRE) とオプションで公開コピーがインストールされます。JDK に付属しているツールを実行する場合は、非公開 JRE が必要です。非公開 JRE にはレジストリの設定がなく、全体が jre ディレクトリ (通常は C:\Program Files\jdk1.6.0\jre) に格納されます。この場所を認識しているのは JDK のみです。一方、公開 JRE は、他の Java アプリケーションで使用でき、JDK の外部 (通常は C:\Program Files\Java\jre1.6.0) に格納され、Windows レジストリ (HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft 上) に登録され、[アプリケーションの追加と削除] を使って削除できます。また、ブラウザに登録したり、java.exe を Windows のシステムディレクトリにコピー (デフォルトシステムの Java プラットフォームとなるように) したりすることもできます。

二つ目の疑問は、「javac」コマンドは環境変数「PATH」を設定(いわゆるパスを通すという作業)をしないといけないのに、「java」コマンドのほうは「PATH」の設定をしなくても動作すること。

JDKのインストール完了直後にコマンドプロンプトで「javac」「java」の両コマンドを実行してみれば、状況が理解できると思う。

この理由は、Windows XPにおいてデフォルトでパスが通っている場所にjava.exeが置かれているためだ。具体的には、公開JREがインストールされたとき、C:\Windows\system32フォルダの中にjava.exeがコピーされる。

一方で、JDKのインストール時に公開JREをインストールの選択から外したとき、非公開JREのほうのjava.exe (JDKに付属のjava.exe)を任意の場所で実行できるようにするにはパスを通す必要がある。

三つ目の疑問は、JDKにパスを通すと、複数のjava.exeにパスが通った状態になるが、このとき、javaコマンドを実行したらどのjava.exeが呼ばれるのか、ということ。

一般に、パスの優先順位は、システム環境変数のほうがユーザー環境変数よりも高く、それぞれ前に(左に)定義したもののほうが後ろに(右に)定義したものよりも高い。そして、優先順位の高いパスのフォルダに格納されたjava.exeが呼び出される。

以上のことを知っておくと、Javaの開発環境におけるトラブルの解決に役立つかもしれない。

【theme : プログラミング
【genre : コンピュータ

プロフィール

よしいず

Author:よしいず
MATHEMATICS.PDFというウェブサイトを運営しています。

管理の都合上、トラックバックとコメントはオフにしてあります。ブログ経験者なら分かっていただけると思いますが、スパム(アダルトやその他の宣伝)ばかりなのが現実です。

リンクは自由です。当サイトの記事に対する間違いの指摘・意見・感想などを述べた記事からのリンクは歓迎です。ただし、ブログ記事アップ直後はミスが多く、頻繁に修正します。場合によっては削除する可能性もあります。その際、何も断りもなく修正・削除しますがご了承ください。内容を参考にする場合には投稿後一週間ほど様子を見てからにしてください(笑)。

記事の間違いを指摘するときは、その具体的箇所、理由(仕様に反するなど)・根拠(参考にした文献など)、代替案(同じ結果を得るための正しいやり方)も教えてください。そうしないと、(指摘される側および第三者はその時点では無知の状態なので、)どこが間違いなのか分かりませんし、本当に間違っているのかどうかが判断・検証できません。実際、間違いだと指摘されたことが結局は正しかったというケースもありますので。

このブログのタイトル一覧

リンク
月別アーカイブ
カテゴリ
最新記事
検索フォーム
RSSリンクの表示