EclipseとJREとJDK

JavaのJREとJDKは何が違うのか…、

一言で言えば、「Javaで作られたプログラムを動かすソフト」がJRE(Java Runtime Environment:Java実行環境)で、「Javaでプログラムを作るソフト」がJDK(Java Development Kit:Java開発キット)です。(参考サイト:http://javapapers.com/core-java/differentiate-jvm-jre-jdk-jit/

JRE とJava SE プラットフォームの違い、JREとJDKの違い、Java Enterprise Edition (Java EE) とは何かについて、ORACLE の Java ヘルプセンター 一般的な質問 の2ページ目の Java 技術情報の入手方法 に書かれています。

Java 開発者コミュニティ内では、習慣的に、Java の開発キットを「JDK」、実行環境を「JRE」と呼んでいます。(参考サイト:JavaTM SE 6 のプラットフォーム名とバージョン番号

Javaのアップデート番号は、CPU(クリティカル・パッチ・アップデート)を含むリリースは奇数番号、限定されたアップデートの場合は偶数番号です。Critical Patch Updatesはオラクル製品のセキュリティ脆弱性の修正を公開する基本の方法で、1月、4月、7月、10月の17日に最も近い火曜日に公開されますが、緊急の場合はこの限りではありません。(参考サイト:【重要】 Javaのセキュリティ脆弱性に対応するアップデート・リリース(1/13版)のお知らせCritical Patch UpdatesとSecurity Alerts

なお、32ビットオペレーティングシステムと64ビットオペレーティングシステムでは、インストールするファイルが違ってきます。「Windows」+「Pause」キーを押して「システム」画面を開くと、「システムの種類」欄で使用しているパソコンのオペレーティングシステムが32ビットか64ビットかを確認することができます。(参考サイト:コンピューターで実行されている Windows オペレーティング システムが 32 ビット版か 64 ビット版かを確認する方法32ビットと64ビットのどちらのシステムがインストールされているのかを確認する方法を教えてください。

また、64 ビットオペレーティングシステムでも、Webブラウザが32 ビット版の場合があります。(参考サイト:64 ビット Windows オペレーティングシステムで使用する場合にダウンロードする Java のバージョンWindows 8でJavaを使用するためのトラブルシューティングのヒント

64 ビットオペレーティングシステムで、プロセスが 64 ビットネイティブモード/32 ビット互換モードのどちらで動作しているのかは、タスクマネージャで判別できます。(参考サイト:64 ビット Windows OS の基本知識

Javaには、コンピューター上でJavaアプリを動かす「ランタイム」と、ソフトウエアをウェブブラウザ上で動かすときに使われる「プラグイン」の機能があります。(参考サイト:Javaってそもそも何なのか? セキュリティー対策としての「無効」設定

Javaをアップデートするとそのままではアプレットが動かなくなることがあります。(参考サイト:「Java」アプレットを実行する JRE のバージョンを指定する方法「Java SE 6完全攻略」番外編 Java SE 6u10の新機能 その8次世代の Java Plug-in とは何ですか ? また旧バージョンとこの新しい Java Plug-in を切り替えるにはどうすればよいですか ?コントロールパネルから Java を使用可能にするにはどうすればよいですか。

Javaアプリケーションを起動して「A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse.」(Eclipse を実行するためには、Java実行環境(JRE)かJava開発キット(JDK)が必要です。)とか、「Java not found in your path. Checking if Java is installed…」(Javaはpathにありません。 インストールされているならPathを確認してください)とか、「The registry refers to a nonexistent Java Runtime Environment installation or the runtime is corrupted.」(設定情報は存在しないJava実行環境を参照しているか、もしくはJava実行環境が破損しています。)などと表示される場合は、Javaのインストールに失敗しているか、インストール後にパスをとおす作業(Pathの設定)がされていないことなどが考えられます。

Javaのインストール中に、「ダウンロード・エラー: JAVA_SP.DLLが壊れています」とメッセージ出る場合は、オフライン・インストーラを試して下さい。(参考サイト:Javaが起動しない。ダウンロード・エラー: JAVA_SP.DLLが壊れています、1305、2755、1606など

Javaのインストールがうまくいかない場合、キャッシュをクリアすることで改善することがあります。(参考サイト:IE と JRE のキャッシュクリア手順書Javaのキャッシュをクリアするにはどうすればよいですか。Web ブラウザのキャッシュを消去する方法

どうしてもうまくいかない場合は、いったんJavaをアンインストール(削除)してから再インストールを試すのもひとつの方法です。Javaをアンインストールする場合は、フォルダやファイルを直接削除するのではなく、コントロールパネルでアンインストールするようにします。(参考サイト:Windows コンピュータから Java をアンインストールするにはどうすればよいですか?

アンインストールに失敗した場合は、以下を参考にして下さい。(参考サイト:Java のアンインストール後に Java のリストを Windows から削除するにはどうすればよいですか。Java のアンインストールが失敗した後にレジストリをクリーンアップするにはどうすればよいですか。Java VMの削除Java の古いバージョンのファイルを削除するJava アンインストールに失敗したとき手動削除する場所Windows8を使っているのですが、Javaのインストールがきちんとできてなくて「javac」はできたのに「java」は実行できませんでした

本文中のバックスラッシュ(\)で表示されている半角文字は、円マーク(¥)と見てください。”コマンドプロンプト”画面などにコピペすればバックスラッシュが円マークになります。(参考サイト:バックスラッシュを入力したい

”コマンドプロンプト”画面を開くには、「Windows」キーを押しながら「R」キーを押して”ファイル名を指定して実行”画面の名前欄に「cmd」と入力し、「OK」をクリックします。

 

JRE(Java Runtime Environment:Java実行環境)

JREは、Javaのサイトからインストールできます。(参考サイト:Javaをインストールするには

64ビットオペレーティングシステムでは、32ビット版JREか64ビット版JREかを意識する必要があります。(参考サイト:64bit環境にJavaランタイムをインストールするときの注意事項

Javaのサイトからインストールするものは、後述のJDKインストールで公開JREと表現しているもので、通常の新規インストールやアップデートでは、Java7のインストールに誘導されます。Java6をインストールするにはJavaアーカイブからになります。(参考サイト:Java 6の最新バージョンはどこで入手できますか。

複数のJREをインストールした場合、最新のバージョンの方が「CurrentVersion」に設定され、システムのデフォルトJava プラットフォームとなります。(参考サイト:JRE Notes

Webをブラウズしていて「Javaをインストールしてください」といわれてインストールするJavaプラグインは、JRE のコンポーネントです。Windows レジストリ (HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft 上) に登録されます。(参考サイト:複数バージョンの JRE および Java Plug-in のサポート64 ビット バージョンの Windows でシステム レジストリを表示する方法

インストールしたJavaをブラウザ内で有効にするには、ブラウザをいったん終了してから再起動する必要があります。 (参考サイト:どうすれば手動で Java をダウンロードして Windows コンピュータにインストールできますか。

Java.comのJava のバージョンの確認サイトでは、インストール済みのJREのうちで、最も新しいバージョンを検出します。複数インストールされている場合の複数のバージョン表示はできません。 (参考サイト:Java Runtime Environment(JRE)のバージョンを調べる

インストール済みのJREは、デスクトップの「スタート」→「コントロールパネル」→「Java」→「JavaコントロールパネルのJavaタブ」→「表示」で確認することができます。複数のJREをインストールしている場合、有効にしたいものにチェックをいれることで、WebブラウザのJavaプラグインとしてどれを利用するか使い分けができます。(参考サイト:Java コントロールパネル

JREは、JVM(Java Virtual Machine:Java仮想マシン)、Javaクラスライブラリ(再利用可能なコードの集まり)、Javaアプリケーション起動プログラムといったJavaアプレットやJavaアプリケーションの実行に必要なソフト、Java Web Startをパッケージ化したものです。JRE、Java Web Startそれぞれのバージョンが古いときは自動的にアップデートされます。(参考サイト:Java Web Start とは何ですか。また、どうやって起動しますか。Java Web Start クライアント・サイドの Java アプリケーションの開発と配布Windows7でJavaの自動アップデートを無効にする

自分の作成したJavaアプリケーションと共に再配布することが可能です。(参考サイト:ライセンスと配布に関する FAQライセンス変更によりJDK/JREが再配布可能にSUN MICROSYSTEMS, INC. バイナリコードライセンス契約書Oracle、Linux ARM用JDKおよびMac OS X用JREをリリース、J2SE Runtime Environment が付属するアプリケーションの配布Javaデスクトップ・アプリケーションのパッケージ化と配布

JREだけではJavaのソースコードをコンパイルできないので、Javaアプリケーションの開発はできません。

 

JDK(Java Development Kit:Java開発キット)

JDKは、Java アプレットやJava アプリケーションの開発に必要です。Java SE Downloadsのサイトからインストールできます。(参考サイト:JDKのダウンロードJava(JDK)ダウンロードとインストールWindowsユーザーのための超入門・Java開発環境構築(1)

Java は、当初は OAK と呼ばれていましたが、1995 年に Java プログラミング言語という名前に変更されました。Javaは、1998年12月のバージョン1.2から”Java 2 Platform”と称し、また、バージョン1.5 から製品バージョンは5.0 と表記するようになりました(ただし、内部バージョン表記は 1.5 のまま)。その後2005年5月にJava2の名称を廃止し、”Java 2 Platform” から”Java Platform” に改め、バージョン末尾の “.0″ をつけなくなりました。JDKは、1.1までJDK(Java Development Kit)、1.2からSDK(Software Development Kit )、1.5.からまたJDKと称して、JDK1.0 → JDK1.1 → J2SE(Java 2 Platform、Standard Edition)1.2SDK → J2SE1.3SDK → J2SE1.4SDK → J2SE5.0SDK(JDK5) → Java SE 6.0(JDK6) → Java SE 7(JDK7)と変化してきたので、過去の資料をみると混乱すると思います。(参考サイト:Java2Java

JDKには、コンパイラーのjavac、Javaのライブラリファイルを生成するjar、JavaのソースコードからHTML形式のAPI仕様書を生成するjavadocなどの開発ツール、クラスライブラリ、ソースコードアーカイブsrc.zipなどが含まれています。(参考サイト:JDK および JRE のファイル構造JDK ツールとユーティリティー – 基本的なツール

JDKを標準インストールすると、非公開JREと公開JREがインストールされます。(参考サイト:JDKのインストール

非公開 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 プラットフォームとなるように) したりすることもできます。」という説明があります。(参考サイト:単体で配布されているJREとJDKの中のJREとの違い素朴な疑問[JDK付属JREとJREの違い]Java SE 6 Release Notes

JDK6を標準インストールすると、Java DBもインストールされます。Java DBを使用しないのであれば、「Java DBをインストールしない」を選択してもよく、なくてもコンパイルはできます。(参考サイト:Java 6のJava DBでデータベース

JDK7を標準インストールすると、JavaFXもインストールされます。Java FXを使用しないのであれば、「Java FXをインストールしない」を選択してもよく、なくてもコンパイルはできます。JavaFXはJDK7にとりこまれましたので、以前のように分かれて表示されなくなりました。 (参考サイト:NetBeansとJavaFX Scene Builderで作るJava GUIアプリケーションJavaFX 2.2の新機能JavaFX2.2とJavaFX Scene Builder 1.0Windows OS上へJDK 7をインストールJavaFXをインストールしてみました

2012年09月02日現在、JDKは、Java SE 6 Update 35、またはJava SE 7u7が選択できますが、JDK6のJava SE 6 Update 35 を選択した場合を以下に示します。
2012年10月18日現在、JDKは、Java SE 6 Update 37、またはJava SE 7u9が選択できますが、JDK6のJava SE 6 Update 37 を選択した場合を以下に示します。

32ビットオペレーティングシステムの場合、JDKの32ビット版(jdk-6u37-windows-i586.exe)をインストールします。インストール先のフォルダをデフォルト(インストーラーおまかせ)のままとすると、「C:\Program Files\Java\jdk1.6.0_37」にJDKが、「C:\Program Files\Java\jdk1.6.0_37\jre」に非公開JREが、「C:\Program Files\Java\jre6」に公開JREが、「C:\Windows\System32」に公開JREの「java.exe」、「javaw.exe」、「javaws.exe」のコピーがインストールされます。

64ビットオペレーティングシステムの場合、JDKの32ビット版(jdk-6u37-windows-i586.exe)、JDKの64ビット版(Jdk-6u37-windows-x64.exe)のどちらでもインストールできます。32ビット版は「C:\Program Files (x86)\Java\jdk1.6.0_37」に、64ビット版は「C:\Program Files \Java\jdk1.6.0_37」にインストールされます。

非公開JREはJDKだけが存在を認識でき、 JDK自身の実行に使用されるもので、後述のJREありEclipseの内蔵のJREのようなものです。公開JREは、JDKの外部に格納されるので、JDK以外の他のアプリケーションも存在を認識でき使用可能です。

 

Javaの開発

JDKをインストールすると、Javacコンパイラが使用できるようになり、Javaの開発をすることができるようになります。

“コマンドプロンプト”画面で、まずcdコマンドなどでJavaソースコード(例えばSample.javaとします)のあるフォルダへ移動します。javac.exeでコンパイルしてクラスファイル(Sample.class)を生成でき、java.exeで実行できます。java.exeはJREにもJDKにも存在しますが、javac.exeはJDKにだけ存在します。

後で述べる「パスをとおす」作業を終えるまでは、コマンド名だけで入力してもエラーになるので、コンパイルは「C:\Program Files\Java\jdk1.6.0_37\bin\javac Sample.java」、実行は「C:\Program Files\Java\jdk1.6.0_37\bin\java Sample」とコマンド名にフォルダ名を修飾して入力する必要があります。(コマンド入力時は、拡張子の「.exe」は省略可能です。)

 

パスをとおす

いちいちコマンド名にフォルダ名を修飾して入力するのは不便です。「パスをとおす」作業をすると、これを解消することができます。

「パスをとおす」というのは、環境変数「Path」にコマンドが存在するフォルダのパス(経路)を設定することをいいます。(参考サイト:絶対パスとフルパスの違いがイマイチわかりません。Java のPath ・ClassPath ・JavaHome 違いJava 環境のセットアップJavaのインストール

環境変数は、システムが必要とするさまざまな情報を保管した変数のことで、例えば、「windir」「SystemRoot」変数はWindowsのインストールされている場所を、「temp」「tmp」変数は一時ファイルを作成する場所を示します。「Path」は実行可能ファイル(コマンド)の検索場所を示すもので、新しく設定したいパスがあるときは追記して編集します。誤って、元々の環境変数入力値を消してしまうと、設定してあったはずの他のコマンドのパスを見失ってシステムに影響を及ぼすので注意が必要です。セミコロン(;)は複数の値を設定する場合の区切り文字なので忘れずに加えます。(参考サイト:環境変数を追加する方法環境変数の設定方法ゼロからはじめるバッチプログラミング – 環境変数編

また、環境変数はユーザ環境変数とシステム環境変数があります。ユーザ環境変数はログオンユーザーに対してのみ適用され、システム環境変数はすべてのユーザーに対して適用されます。システムは、通常はユーザー環境変数の設定を先に探して適用し、該当が無ければシステム環境変数の設定を適用します。しかし「Path」の場合は、ユーザー環境変数「Path」の値をシステム環境変数「Path」の値の末尾に追加したものを適用します。

「パスをとおす」作業が不安な場合、”コマンドプロンプト”画面で「path > pathsave.txt」と入力して、システム環境変数「Path」の値を「pathsave.txt」(ファイル名は任意)に保存しておくことができます。「path」とだけ入力すると、現在の「path」の変数値が画面に出力されます。通常、コマンドの実行結果は標準出力と呼ばれるデバイスへ出力され、デフォルトでは標準出力は画面に設定されています。ここではリダイレクトという仕組みを用いて、標準出力内容をファイルに出力するよう指定しています。「path」コマンドの結果を「pathsave.txt」というファイルに書き込むという指示をしたことになります。(参考サイト:リダイレクトリダイレクトとパイプ

ここでは、JDKの「パスをとおす」作業をします。具体的な内容は以下のとおりです

  1. 「Windows」キーを押しながら「Pause」キーを押して”システム”画面を開きます。
  2. 「システム詳細設定」をクリックし、システムのプロパティを開きます。
  3. 詳細設定タブの「環境変数」をクリックします。
  4. システム環境変数「Path」を選択し、「編集」をクリックします。(大文字小文字は無視されるので 「Path」「PATH」「path」はどれも同じです。例えば「PATH」があるのに「Path」を新規作成すると、「PATH」の内容を置き換えてしまうので注意が必要です。)
  5. 「変数値」の最初に「C:\Program Files\Java\jdk1.6.0_37\bin;」を追記し、「C:\Program Files\Java\jdk1.6.0_37\bin;【元々のシステム環境変数入力値】」となるようにします。
  6. 環境変数で「OK」をクリックします。
  7. システムのプロパティで「OK」をクリックします。

Eclipse 3.7.2 Full All in One (JRE あり) Java用を「c:\pleiades」にインストールしていて、JDKをインストールしていない場合は、「C:\Program Files\Java\jdk1.6.0_37\bin;」のかわりに、「C:\pleiades\java\6\bin;」)を環境変数「Path」に設定します。例にあげたものと別のバージョンの場合は、Eclipse メニューの「ウィンドウ」→「設定」→「Java」→「インストール済みのJRE」に設定されているフォルダ配下のbinを「変数値」の最初に追記します。

なお、システム環境変数「JAVA_HOME」に「C:\Program Files\Java\jdk1.6.0_37」と設定し、「Path」の「変数値」を「%JAVA_HOME%\bin;【元々のシステム環境変数入力値】」とする記述の仕方もできます。「%JAVA_HOME%」は、「環境変数JAVA_HOMEに設定された値」を示すので、「C:\Program Files\Java\jdk1.6.0_37\bin;【元々のシステム環境変数入力値】」と記述したのと同じになります。「JAVA_HOME」は、本来はTomcatアプリケーションにJDKの場所を示すための環境変数でした。現在ではTomcatアプリケーション以外でもJAVA_HOMEを参照するアプリケーションもあるようですから、適宜適切な書き方を選択します。(参考サイト:JAVA_HOME

例えば、Android SDK のインストーラ版では途中Javaの存在チェックが入りますが、「JAVA_HOME」にJDKのパスを設定すれば、あえて「%JAVA_HOME%\bin;【元々のシステム環境変数入力値】」と「Path」に記述しなくても、Javaの存在チェックを通過できます。ネットでWindows(64bit)にJDKの64bitをインストールしてAndroid SDK for Windowsのインストーラ版(installer_r20.0.1-windows.exe)を利用すると、「「Path」を設定しているのに「指定されたファイルが見つかりません」とエラーになりインストールできない」という投稿や、「Android SDK Managerを起動しようとしても”コマンドプロンプト”画面が一瞬だけ表示されるだけで失敗する」という投稿を見ますが、「JAVA_HOME」を設定すれば回避できるようです。(参考サイト:Android SDKがWindows7(Home Premium SP1)にインストールできません。

 

「JAVA_HOME」と「Path」の設定確認

「パスをとおす」作業が終わったら”コマンドプロンプト”画面で確認用のコマンドを入力して各種設定値を表示してみます。注意点として、環境変数修正前から開いていた”コマンドプロンプト”画面には修正結果は反映されないので、”コマンドプロンプト”画面を開きなおしてから確認用のコマンドを入力します。(参考サイト:環境変数を変更したら再起動すべきか

  1. 「JAVA_HOME」の設定を見るには、「echo %JAVA_HOME%」とコマンドを入力します。
  2. 「path」の設定を見るには、「echo %path%」あるいは「path」とコマンドを入力します。
  3. 両方の設定を1回で確認したいなら、「set」とコマンドを入力します。様々な情報とあわせて「JAVA_HOME」と「path」の両方の設定が表示されます。

私のパソコンWindowsVista(32Bit)の場合、「Path」の元々の環境変数入力値は、「%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Edy\Edy Library;C:\Program Files\Common Files\Adobe\AGL;C:\Program Files\Common Files\Sony Shared\FeliCaLibrary;c:\Program Files\Common Files\Roxio Shared\DLLShared\;c:\Program Files\Common Files\Roxio Shared\DLLShared\;c:\Program Files\Common Files\Roxio Shared\9.0\DLLShared\;C:\Program Files\Common Files\Ulead Systems\MPEG;C:\Program Files\Justsystems\JSLIB32;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\」が設定されています。「set」とコマンドを入力すると、「SystemRoot=C:\Windows」と表示され、「Path」の部分は「%SystemRoot%」の部分が展開されて「Path=C:\Program Files\Java\jdk1.6.0_37\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;[様々なプリインストールアプリのパス]~」のように確認できました。

別の私のパソコンWindows8(64Bit)の場合、「Path」の元々の環境変数入力値は、「%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\\」が設定されていました。

間違ってシステム環境変数「Path」の値を消してしまったら、値を保存していないと復旧は困難です。(参考サイト:消してしまった環境変数の値を元に戻したいどなたかWindows7 64bit 環境変数 Pathのデフォルトを教えていただけないでしょうか?OSの種類によってバッチ・ファイルの処理を切り替える方法-OS別に調査したデフォルトの環境変数システム環境変数/ユーザー環境変数のデフォルト値一覧

「Path」の消してしまった元々の「変数値」が不明の場合、クリーンインストール直後(プリインストールアプリがない状態)の値を設定するしかないでしょう。WindowsVista(32Bit)なら「%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem」を、Windows7(32Bit)なら「%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\」を設定します。

Windows7で増えている「PowerShell」が何か気になる方は、参考サイトを参照してください。(参考サイト:Windows PowerShell 入門(1)-基本操作編Windows PowerShell 入門

プリインストールアプリ実行時にエラーがでた場合、判別できるのであればコマンドの場所を「Path」に追加します。

 

利用されるJavaのバージョン確認

利用されるJavaのバージョンは、”コマンドプロンプト”画面でJREは「java -version」、JDKは「javac -version」とすることで確認することができます。

両コマンドの「-version」オプションの部分は小文字で入力しないと、「Unrecognized option: -VERSION  Could not create the Java virtual machine.」や「javac: -VERSION は無効なフラグです。」といったエラーになります。このように大文字と小文字を違うものとして認識することをケースセンシティブ(Case sensitive)といいます。

「java -version」とすると「java version “1.6.0_37″」とならずに「`java`は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」、「javac -version」とすると「javac 1.6.0_37」とならずに「`javac`は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」と表示されエラーになる場合は、「Path」の設定がうまくできていません。先に示した「Path」の設定確認の方法で、意図した設定になっているか、「;」や「¥」が抜けていないかを確認します。

なお、Java(JREあるいはJDK)のパスをシステム環境変数「Path」の最後に追記したり、ユーザー環境変数の「Path」に設定したりした場合、利用されるJavaが意図しないものになる場合があります。(先に述べたように、ユーザー環境変数に「Path」を作成して値を設定すると、システム環境変数「Path」の末尾に値を追加したものと同じ様に取り扱われます)

例えば、Java SE 6 Update 37であれば、「C:\Program Files\Java\jdk1.6.0_37\bin;」を「Path」の「変数値」の最初に追記するのではなく、「;C:\Program Files\Java\jdk1.6.0_37\bin」を「Path」の「変数値」の最後に追記した場合です。

公開JREをインストールしていると、「C:\Windows\System32」フォルダにも公開JREの「java.exe」がコピーされています。「C:\Windows\System32」フォルダは「Path」に設定されており、実行可能ファイルの検索は、「Path」の「変数値」の左から右の順におこなわれるので、より左に記述したフォルダに存在するJavaがヒットします。ですから、「java -version」は、「C:\Windows\System32\java.exe -version」と認識され公開JREの「java.exe」のバージョンが表示されます。他にも、以前すでにJavaのパスを設定済みで残っていればそちらの「java.exe」が先にヒットするかもしれません。「C:\Program Files\Java\jdk1.6.0_37\bin;」を最初に追記することで、JDKの「java.exe」がすべての他の「java.exe」より先にヒットし、「C:\Program Files\Java\jdk1.6.0_37\bin\java.exe -version」と認識されます。

「C:\Windows\System32」フォルダの公開JREの「java.exe」のバージョンを知りたい場合は、ファイルを右クリック→プロパティ→詳細タブとすると、製品名とファイルバージョンが表示されるので、あらかじめ確認することができます。(参考サイト:Java Runtime Enviroment(JRE)のバージョンを調べる

公開JREをインストールしている場合、JDKのパスの設定に失敗していても「C:\Windows\System32\java.exe -version」と認識されるので、たまたま設定しようとしたJavaのバージョンが公開JREと一緒の場合、設定に成功しているように錯覚します。javac.exeは公開JREには含まれていないので、「javac -version」とコマンドを入力して「`javac`は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」と表示されることで、失敗に気づくことができます。

Windows Vista以降にある「where」コマンドは実行ファイルの検索ができます。(参考サイト:whereコマンドでファイルを探す) ”コマンドプロンプト”画面で「where java」、「where javac」とコマンドを入力すれば、「Path」に設定されているJavaのパスをチェックすることができます。パスが存在しない場合は「情報: 与えられたパターンのファイルが見つかりませんでした。」と表示されます。両コマンドとも1件もヒットしない場合は、公開JREはインストールされておらず、JDKのパスの設定に失敗していることになります。

また、公開JREには、JDK にはあるサーバモードのJava仮想マシン(JVM or Java VM or Java virtual machine) である Java HotSpot Server Virtual Machine (サーバ VM)  がありません。あるのは、Java HotSpot Client Virtual Machine (クライアント VM) だけです。(参考サイト:チューニングのためのJavaVM講座(前編)Java HotSpot VMにおけるJITコンパイルの概要JVM~メモリ管理~) ですから、”コマンドプロンプト”画面で「java -server」とサーバ VM の起動オプション「-server」を付与したコマンドを入力して「Error: missing ‘server’ JVM at ‘C:\Program Files\Java\jre6\bin\server\jvm.dll’. Please install or use the JRE or JDK that contains these missing components.」とでるなら、JDKを参照していないことになります。

JVM のパフォーマンスについての参考サイトを記します。(参考サイト:Java VMパフォーマンスチューニングガイドJVMのチューニングヒープメモリを使い果たさないガベージコレクタのエルゴノミクスVMのヒープ最大サイズを1GBより大きくする方法JVMヒープサイズのデフォルト値は?

古いバージョンのJavaをダウンロードしたい場合は、Javaアーカイブのダウンロード・ページを利用します。アカウントがない場合は「サインアップ」が必要になります。(参考サイト:Javaの古いバージョンおよび関連ドキュメントはどこで入手できますか。Java実行環境をインストールするにはjava7からjava6に変えたいのですが、やり方がわかりません。 直サイト教えて下さい…Javaランタイムの入手方法

あるいは、Pleiades All in One の Ultimate 版 または Java 版 の Full Edition(JREあり) にもJavaが同梱されているので、以前のバージョンを展開後に「jre」フォルダや「java」フォルダから古いバージョンのJavaを取り出すという方法でも良いかもしれません。

 

Eclipse

EclipseはJavaアプリケーションです。起動にJava(JREあるいはJDK)のインストールを必要とするかはパッケージにより異なります。

64ビットオペレーティングシステムの場合、JDK(JRE)32ビット版+Eclipse32ビット版またはJDK(JRE)64ビット版+Eclipse64ビット版の組み合わせで動作します。JDK(JRE)32ビット版+Eclipse64ビット版やJDK(JRE)64ビット版+Eclipse32ビット版の組み合わせでは動作しません。「Failed to load the JNI shared library」とエラーになります。(参考サイト:32 ビット アプリケーションの実行

Javaを認識できない場合は、 「A Java Runtime Environment(JRE) or Java DevelopmentKit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after following locations:  %ECLIPSE_HOME%\jre\bin\javaw.exe javaw.exe in your current PATH」(Eclipse を実行するためには、Java実行環境(JRE)かJava開発キット(JDK)が必要です。 次の場所にはJava仮想マシンはみつかりませんでした。 Eclipseインストールフォルダのjre\bin\javaw.exe あなたの現在の環境変数「PATH」で設定したフォルダのjavaw.exe)とエラーになります。

「eclipse.ini」ファイルでEclipse 起動に利用するJavaを明示したり起動ショートカットにオプション指定したりすると、Pathで設定したJavaよりも優先されます。(参考サイト:Eclipse 起動時に使用する Java VM を指定するEclipseがjre(javaw.exe)のバージョンが違って動かない

「eclipse.ini」ファイルはメモ帳で開くと改行されずに表示されます。編集する際は、ワードパッドを利用したり、改行コードを反映するエディタを利用したり、改行コードを書き換えてからメモ帳を利用したりします。(参考サイト:eclipse.iniの改行コードを変更するには?

Eclipseメニューの「ヘルプ」→「Eclipseプラットフォームについて」→「インストール詳細」→「構成」タブをクリックして表示される情報の、「-vm」の次の行を見ると起動に使用されたJREを確認することができます。(参考サイト:Eclipse 起動時に使用されている Java VM を確認してみよう

使用されたJREは、java.lang.SystemクラスのgetPropertyメソッドを使って確認することもできます。(参考サイト:Gradleに正しいJAVA_HOMEのパスを教えるJavaのシステム値を取得する(System.getProperty)WindowsとLinuxの両方で動作するコードを書くJava備忘録 -javaでWindowsログインIDの取得-

Eclipse(JDTプラグインをインストールしているJava版やJava EE版)は内蔵の独自コンパイラECJ(Eclipse Compiler for Java)を使用してJavaソースコードをコンパイルします。(参考サイト:ECJ – Eclipse Compiler for Javaなぜ Eclipse は JRE を使っているのにコンパイルできるの?

JDKのJavacコンパイラ(javac.exe)は利用しないので、実はJDKをインストールしていなくても支障なくコンパイルできます。JDKのどのバージョンの仕様に沿ってコンパイルするかは、Eclipse メニューの「ウィンドウ」→「設定」→「Java」→「コンパイラ準拠レベル」で設定します。バージョンにより、クラスやメソッドが追加されたり、非推奨化されたりしています。(参考サイト:Java新機能(Javaの変更点)

「コンパイラ準拠レベル」で設定したバージョンで採用されていない文法は、コンパイルエラーになりますが、メソッドの有無の判定は「インストール済みのJRE」で設定したランタイムクラスライブラリ(rt.jar)のバージョンに依存します。(参考サイト:eclipseの設定のJREとコンパイラの違い

Javaのソースコードをメモ帳で編集しUTF-8で保存すると、自動でファイルの頭にUnicodeサインのBOM(Byte Order Mark)がつきます。(参考サイト:UTF-8 と UTF-8N の違いは何か?

BOMがついたものはECJではコンパイルできますが、Javacコンパイラでは「 \65279 は不正な文字です。」とエラーになります。それ以外でも、ごく一部の書き方では、ECJでエラーがなくてもJavacコンパイラではエラーになることがある様です。(参考サイト:ECJ (Eclipse Compiler for Java) は面倒見が良すぎ…Eclipse で作成したソースを javac でコンパイルするとエラー

本家Eclipseや、JREなし版の日本語EclipseのPleiades All in Oneの起動には、「java -version」で確認したJREが利用されます。

EclipseでJava開発するなら公開JREだけですべて済みそうですが、JDKをインストールして利用したほうがいいでしょう。それは、Eclipse メニューの「ウィンドウ」→「設定」→「Java」→「インストール済みのJRE」の設定がJREになっていると、JREはクラスライブラリのソースをもたないため、デバッグ時にJavaのAPIにステップインした場合に「ソースが見つかりませんでした。」と表示されて不便だからです。JREではなくJDKを設定しておくとクラスライブラリのソースコードアーカイブを含んでいるので、JavaのAPIにステップインしてもソースが表示されスタックトレースできます。

また、TomcatアプリケーションでJSPを利用する場合も、JDKにある「tools.jar」ファイルが必要で(「tools.jar」ファイルにはJavacコンパイラが含まれています)、JREでは「org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 」 「原因  Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK 」とエラーになります。Linuxの場合は、別の要因でもこのエラーになることがあるようです。(参考サイト:いまさら聞けないTomcat〜JSPサーバ構築のキソプログラムからコンパイル – Compiler API その1

なお、公開JREはWebブラウザのJavaプラグインとして利用されるので、セキュリティ上から最新版がでればすぐにアップデートしたほうが良い性質のものです。(参考サイト:「Java アップデートを入手可能」というメッセージが画面右下から頻繁に表示されるJRE7u10 からコントロールパネルのセキュリティタブがちょっと変わった

必要な時以外は無効化することもできます。(参考サイト:JAVAを主要3ブラウザ「Internet Explorer、Chrome、Firefox」で無効化する方法

システムの安全性を高めるには、インストールされているJREのバージョンを把握し、脆弱性の懸念のある不要な古いJavaはアンインストールするのがよいでしょう。(参考サイト:Oracle、Java SE向けにクリティカルパッチアップデートを公開米オラクル、Java 7の深刻な脆弱性を塞ぐアップデートを緊急リリース古いバージョンのJava Runtime Environmentはアンインストールしてもよい

公開JREを「インストール済みのJRE」に設定するとアップデートのたびにライブラリがかわることになります。特に企業で複数の人間で開発している場合は、チームメンバー全員の開発環境が同じであることが求められるので、特定のJDK(JRE)のバージョンで「インストール済みのJRE」を固定して開発することになるでしょう。(参考サイト:チーム開発に向けたビルド環境の構築Java開発環境Eclipse(エクリプス)のお話

もし、Javaの自動アップデートを無効にしたい場合は、公開JREの「javacpl.exe」(Java6であればC:\Program Files\Java\jre6\bin\javacpl.exe)を右クリック→「管理者として実行」をクリックして「Javaコントロール・パネル」画面を表示し、更新タブの「更新を自動的にチェック」をはずしてアップデートを無効にするよう設定します。(参考サイト:JavaのアップデートチェックがうざいJava Updateとは

ただし、Javaの自動アップデートを無効にする前に、Java(JRE)が原因でウイルス強制感染! Java Update無効停止は危険を一読することをお勧めします。

本家Eclipseの場合、JDKにパスをとおして新規のworkspaceで起動すれば、「インストール済みのJRE」にはJDKが設定されます。既存のworkspaceで起動すると、「インストール済みのJRE」の設定は、その既存のworkspaceが保持しているものとなります。

「インストール済みのJRE」にJDK6のJava SE 6 Update 37を設定する方法を説明します。Eclipseメニューの「ウィンドウ」→「設定」→「Java」→「インストール済みのJRE」の設定で「追加」をクリック→「標準VM」を選択し「次へ」をクリック→「ディレクトリー」をクリック→フォルダの参照画面から、「コンピュータ」≫「ローカルディスク」≫「Program Files」≫「Java」≫「jdk1.6.0_37」とフォルダを選択し、「OK」をクリック→JREシステムライブラリー欄にjarファイルが列挙されるを確認して「完了」をクリックして追加し、追加しただけでは設定されないので、チェックを入れます。(参考サイト:【eclipce】JREからJDKへ変更する方法(jspを使うためには必須)

 

その他

javacのバージョンよりもjavaのバージョンが古い場合、例えばJava7(1.7)でコンパイルしたものをJava6(1.6)で実行しようとすると
「Exception in thread “main” java.lang.UnsupportedClassVersionError: sample : Unsupported major.minor version 51.0」のようにエラーになります。(参考サイト:eclipseで作成したサーブレットをサーバー上で動かしたいがエラー。ContOSでJava SE 1.7をインストールしたけどJREバージョン違いで実行できない!GAE に配置した Servlet が動かなくてしばらく困っていたけどようやく解決Java 7 Questions & Answers

Eclipseで、コンパイルと実行のバージョンをJava6に合わせようとして「インストール済みのJRE」を「1.7」jから「1.6」へ変えただけでは不十分です。クリーンビルドを実行して、コンパイルを意図的にし直す必要があります。(参考サイト:どうすれば、以前のJavaのバージョンに私のEclipseプロジェクトに変換するのですか?

Java(major.minor version)の組み合わせは
Java1.1(45.3)、Java1.2(46.0)、Java1.3(47.0)、Java1.4(48.0)、Java1.5(49.0)、Java1.6(50.0)、Java1.7(51.0)
となっています。(参考サイト:Javaアプリケーション メモ

javacとjavaのバージョンが合わせられない場合は、コンパイル時に-targetを指定してクロスコンパイルする方法もあります。(参考サイト:Javaのバージョンあれこれ

Javaの脆弱性が見つかり、対策の一つとして、一時的にJavaアプレット実行機能を無効化したい場合の参考サイトを記します。(参考サイト:セキュリティ攻撃阻止のためにWebブラウザでJavaを無効化する脆弱性が見つかったときなどに:各ブラウザのJavaを無効化する方法(Chrome / Firefox / Internet Explorer / Opera)

Java Platform, Standard Edition (Java SE) および JDK のドキュメントの一覧はこちらにあります → Java SE API & ドキュメント

JAR (Java ARchive)ファイルを.exeに変換する方法の参考サイトを記します。(参考サイト:.jarファイルを.exeに変換する方法について。内部でJavaVMを立ち上げてjarファイルを実行するexeを作る【 JAVA言語のススメ 】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>