ここで説明している2つの環境変数を区別する必要があります。1つはJAVA_HOME変数です。もう1つはPath変数です。JAVA_HOME変数を参照するプロセスは、JREではなく、JDKへの検索パスを探します。JAVA_HOME変数の使用は、Javaコンパイラ自体のためのものではありません。コンパイラーは自身の場所を認識しています。この変数は、他のソフトウェアがコンパイラーをより簡単に見つけるためのものです。この変数は通常、JavaソフトウェアからアプリケーションをコンパイルおよびビルドするためにIDEソフトウェアで使用されます。対照的に、Windows CMDインタープリター、および他の多くのファーストパーティおよびサードパーティのソフトウェアは、JAVA_HOME変数ではなく、Path変数を参照します。
ユースケース1:CMDからのコンパイル
したがって、たとえば、IDEソフトウェアを使用しておらず、現在の作業ディレクトリに関係なく、CMDからコンパイルできるようにする場合は、Path変数を正しく設定する必要があります。あなたの場合、JAVA_HOME変数さえ必要ありません。CMDはJavaコンパイラを見つけるためにJAVA_HOMEではなくパスを使用しているためです。
ユースケース2:IDEからのコンパイル
ただし、IDEソフトウェアを使用している場合は、まずドキュメントを参照する必要があります。JAVA_HOMEを設定する必要がある場合がありますが、同じ目的で別の変数名を使用する場合もあります。長年の事実上の標準はJAVA_HOMEでしたが、これが常に当てはまるとは限りません。
ユースケース3:IDEおよびCMDからのコンパイル
IDEソフトウェアに加えて、現在の作業ディレクトリに関係なく、CMDからコンパイルできるようにする場合は、JAVA_HOME変数に加えて、JDK検索パスをPath変数に追加する必要がある場合があります。
JAVA_HOMEとパス
問題がJavaのコンパイルに関連している場合は、JAVA_HOME変数とパス(該当する場合)を確認します。問題がJavaアプリケーションの実行に関連している場合は、Path変数を確認する必要があります。
パス変数は、すべてのオペレーティングシステムで普遍的に使用されます。これはシステムによって定義されており、JREの検索に使用されるデフォルト変数であるため、Javaアプリケーションの実行で問題が発生することはほとんどありません。特に、ソフトウェアインストーラーが通常すべてをセットアップするWindowsでは、そうではありません。ただし、手動でインストールする場合は、JAVA_HOME変数を完全にスキップして、JDKとJREの両方に対してすべてにPath変数を使用するのが最も安全な方法です。IDEソフトウェアの最新バージョンは、それを取得して使用できる必要があります。
シンボリックリンク
シンボリックリンクは、既存の環境変数のいずれかを便乗させることによってJDK検索パスを参照するさらに別の方法を提供する場合があります。
私は、Oracle / SunのJDK / JREリリースの以前のバージョンについてはわからないけど、jdk1.8.0_74ための少なくともインストーラは、検索パスを追加C:\ProgramData\Oracle\Java\javapath
PATH変数に、そしてそれが文字列値の先頭にそれを置きます。このディレクトリには、JREディレクトリ内のjava.exe、javaw.exe、javaws.exeへのシンボリックリンクが含まれています。
したがって、少なくともJava 8 JDK、およびおそらくJava 8 JREスタンドアロンでは、JREに対して環境変数の構成を行う必要はありません。インストーラパッケージを使用して設定する限り。ただし、Windowsのインストールに違いがある場合があります。Oracle JREはJDKにバンドルされています。
Java JDK構成が間違ったバージョンのコンパイラを使用している、または明示的に定義されていない(魔法を使わずに)魔法で機能しているように見える場合は、環境変数のどこかにシンボリックリンクがある可能性があります。 。そのため、シンボリックリンクを確認する必要がある場合があります。