ここで同じ意味で説明されている 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 ではなく Path を使用しているためです。
ユースケース 2: IDE からのコンパイル
ただし、IDE ソフトウェアを使用している場合は、まずドキュメントを確認する必要があります。JAVA_HOME を設定する必要がある場合がありますが、同じ目的で別の変数名を使用することもできます。何年にもわたって事実上の標準は JAVA_HOME でしたが、常にそうであるとは限りません。
ユース ケース 3: IDE および CMD からのコンパイル
IDE ソフトウェアに加えて、現在の作業ディレクトリに関係なく CMD からコンパイルできるようにする場合は、JAVA_HOME 変数に加えて、Path 変数に JDK 検索パスを追加する必要がある場合もあります。
JAVA_HOME とパス
問題が Java のコンパイルに関連している場合は、JAVA_HOME 変数とパス (該当する場合) を確認します。問題が Java アプリケーションの実行に関連している場合は、Path 変数を確認する必要があります。
パス変数は、すべてのオペレーティング システムで普遍的に使用されます。これはシステムによって定義され、JRE の検索に使用されるデフォルト変数であるため、Java アプリケーションの実行に問題が生じることはほとんどありません。特に、ソフトウェアインストーラーが通常すべてをセットアップするWindowsではそうではありません。しかし、手動でインストールする場合、おそらく最も安全なのは、JAVA_HOME 変数を完全にスキップして、JDK と JRE の両方のすべてに Path 変数を使用することです。IDEソフトウェアの最近のバージョンは、それを拾って使用できるはずです。
シンボリックリンク
シンボリック リンクは、既存の環境変数の 1 つをピギーバックすることにより、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 構成が間違ったバージョンのコンパイラを使用していることに気付いた場合、または明示的に定義されていなくても (呪文をキャストせずに) 魔法のように動作しているように見える場合は、環境変数のどこかにシンボリック リンクがある可能性があります。 . したがって、シンボリックリンクを確認することをお勧めします。