私のJavaコードでは、この行System.getProperty("Java.home")
があります。一部の環境では、これは環境変数として_Java_HOME
_に設定されたものと同じ値を返します。
ただし、一部の環境では、System.getProperty("Java.home")
は_Java_HOME
_とはまったく異なる値を返します。
だから私の質問は、Javaの観点から_Java.home
_と_Java_HOME
_の違いは何ですか?
私の調査からわかっているのは、_Java_HOME
_はjdkインストールパス、_Java.home
_はjreインストールパスですが、jreはjdkインストールの一部である可能性があるため、なぜ一致しないのですか。
あなたが述べたように、Java_HOMEは環境変数(%Java_HOME%によって与えられたJDKインストールパスを指します)。
ただし、Java.homeは JREインストールパス を指しているため、アプリケーションの実行に使用されたJREが返されます。同じサーバー/コンピューター上に複数のバージョンのJREとJDKを置くことができることを忘れないでください
また、使用するjreまたはjdkを指定してアプリケーションを実行できます。
したがって、たとえば、環境パスを使用している場合:
%Java_HOME% = C:\Program Files\Java\jdk1.6.0_24
ただし、特定のjreを使用してアプリケーションを実行した場合:
"C:\Program Files (x86)\Java\jre1.8.0_73\bin\Java" -jar TheJavaFile.jar
実行時のアプリケーション内で、Java.homeに異なるバージョンのJava_HOMEを取得します。
これは、場合によっては変数とシステムプロパティの両方で異なるバージョンを取得する理由を説明している可能性があります。
また、JREはJDKとは異なる製品であるため、パスがまったく異なる場合があることに注意してください。これらは独立しているため、異なる場所にインストールされます
さて、1つのJDKとJREの違いについて、この図はそれをかなり明確に説明しています。
JDKはJREのスーパーセットであり、JREに含まれるすべてのものに加えて、アプレットやアプリケーションの開発に必要なコンパイラやデバッガなどのツールが含まれています。 JREは、ライブラリ、Java仮想マシン(JVM)、およびJavaプログラミング言語で記述されたアプレットとアプリケーションを実行するためのその他のコンポーネント)を提供します。
Oracleのドキュメント によると、Java.home
はシステムプロパティであり、=のインストールディレクトリを表します。 Javaランタイム環境。Java_HOME
は環境変数-システムプロパティではありません。 この投稿 は、システムプロパティと環境変数の違いを確認します。
Java_HOME
の詳細については、 この投稿 を参照することもできます。