web-dev-qa-db-ja.com

Java.homeとJava_HOMEの違い

私の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インストールの一部である可能性があるため、なぜ一致しないのですか。

10
yogsma

あなたが述べたように、Java_HOMEは環境変数(%Java_HOME%によって与えられたJDKインストールパスを指します)。

ただし、Java.homeJREインストールパス を指しているため、アプリケーションの実行に使用された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の違いについて、この図はそれをかなり明確に説明しています。

enter image description here

JDKはJREのスーパーセットであり、JREに含まれるすべてのものに加えて、アプレットやアプリケーションの開発に必要なコンパイラやデバッガなどのツールが含まれています。 JREは、ライブラリ、Java仮想マシン(JVM)、およびJavaプログラミング言語で記述されたアプレットとアプリケーションを実行するためのその他のコンポーネント)を提供します。

6
Marco Vargas

Oracleのドキュメント によると、Java.homeシステムプロパティであり、=のインストールディレクトリを表します。 Javaランタイム環境。Java_HOME環境変数-システムプロパティではありません。 この投稿 は、システムプロパティと環境変数の違いを確認します。

Java_HOMEの詳細については、 この投稿 を参照することもできます。

3
Alexey R.