JREやらJDKやら

javaCLASSPATHについて調べてたらJDKやらJREやらバージョンが多くて混乱してきたのでメモ。
まずはJavaを動かすために必要なもの。これは以下の4つ。

この4つはWindowsにもLinuxにも標準装備されていない。よって、自力でインストールする必要がある。(ただしソースコードについては別)

APIJ2SEJ2EE

関数群のこと。
Javaには死ぬほどたくさん関数が用意されているため、一気にインストールすると大変。ということで、必要に応じてインストールしてやる。
代表的なAPIJ2SEJ2EE

  • J2SE
    • Javaを使うための最も基本的な関数群。これがないとAPIが使えない。
  • J2EE
    • Web上でJavaを使うためのちょと高級な関数群。これがないとWeb上でJavaが扱えない。
      Tomcatに装備されているため、Tomcatをインストールすればこれは必要ない。

コンパイラJava VMJava Virtual Machine

Java VMとは、Javaを実行するためのソフトウェア。
ただし、ソースコードを書いただけではもちろん実行できない。なぜならJava言語を理解できないから。
よって、Java VMが理解できるように翻訳してやるコンパイラが必要となる。

▼結局なにをインストールすればいいのか

JDKというものをインストールしてやると、以下の3つが一気に準備できる。

つまりJDKとは、Javaのコードを作成して実行するためのキット
ちなみに最新バージョンはJDK1.6(6.0)で、1.4まではJDKのことはJ2SDKと呼んでいた。大変紛らわしい。

▼で、JDKJREの違いは?

JDKは↑の通り、開発環境のキット。一方、JREは実行環境のキット。JREにはコンパイラAPIなどは含まれない
他にも以下のような違いがある。

  • JDKは複数のバージョンを使い分けることができるが、JREは使い分けができず、常に最新のバージョンが推奨される。(自動的にネットでチェックして新しいバージョンがあれば更新可能であることをユーザに通知するのがデフォルトの設定)
  • 同じバージョンのJDKJREをインストールしても不整合は生じない。
  • JDKJREが混在したときのPATH、CLASSPATH
    • コンパイル時はJDKのPATHを通す。
    • java、javawのコマンド実行時はJREのPATHを通す。
      環境変数PATHにJDKを設定していても自動でPATHが設定されてしまう。
      ちなみに、JREがインストールされておらず、複数バージョンのJDKが存在する場合は、 %JAVA_HOME%\binに設定されたPATHが通される。
    • コマンド実行時にPATHを指定した場合、指定されたほうのPATHを通す。

JDKやらJREやらについて疑問が沸いたきっかけというのが、JUnitを起動したときに、
「なぜCLASSPATHに%JUNIT_HOME%\junit.jarを指定しているのに、jre1.6.0_02のPATHが通されるのか」
だったので、たぶん3つ目のあたりがポイントなんだろう。