web-dev-qa-db-ja.com

MavenのJava_home

mvn -versionを実行したときに、Java_home...jdk\jreを指していることに気付きました(以下を参照)。それは間違っていますか? ...\jdk.x.y.z\jreなし)を指しているのではないでしょうか?その場合、どのようにリセットしますか? (グローバル%Java_home%jdkディレクトリを指します)

C:\Users\Owner>mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-06 15:16:01-0400)
Java version: 1.7.0_17
Java home: C:\Program Files\Java\jdk1.7.0_17\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7" version: "6.1" Arch: "AMD64" Family: "windows"
35
One Two Three

いいえ、それは間違っていません。 JDKが使用するJREを指します。 Mavenの外でJava_HOMEを印刷すると、正しく印刷されるはずです。

C:\>echo %Java_HOME%
C:\Program Files\Java\jdk1.7.0_07

C:\>mvn -version
Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200)
Maven home: C:\APPS\Apache-maven-3.0.4\bin\..
Java version: 1.7.0_07, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_07\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", Arch: "AMD64", family: "windows"
C:\>

したがって、基本的にJava_HOMEはJDKインストールを指す必要があります(mavenにはtools.jarが必要です)が、mavenは実際にJDK内のjreを使用してそれ自体を実行します。

mvn -versionを使用する場合、 ソースコードからわかるように、mavenはJava内部Java.homeプロパティを使用します

version.append( "Java home: " + System.getProperty( "Java.home", "<unknown Java home>" ) ).append( LS );

このプロパティはJava_HOME環境設定と同じものではないので、だまされる可能性があります。実際には、コードを実行しているJREを示す動的プロパティです。同じものを出力するTest.Javaテストクラスをコンパイルして実行すると、Java_HOMEがJDKを指している場合、Java.homeの値がJava_HOMEと等しくないことがわかります。これは予想されることです。

引用 this

Java_HOMEとJava.homeの違いは何ですか?

Java_HOMEは、JDKインストールディレクトリです(例:C:\ jdk5)。環境変数として設定され、WindowsバッチファイルまたはUnixスクリプトで参照されることを意図しています。他の一般的な環境変数とともに、Windowsコントロールパネルと.tcshファイルに常にあります。いくつかのJavaアプリケーションはこの目的のためにjdk.homeという名前を使用しますが、これはより良い名前だと思います。

Java.homeはJREインストールディレクトリです(例:C:\ jdk5\jre、またはC:\ Program Files\Java\jre1.5.0_06)。 Java_HOMEとは異なり、Java.homeを環境変数として見たことはありません。 Java.homeはビルドインJavaシステムプロパティ、その値はJREインストールディレクトリです。すべてのJavaシステムプロパティはAntビルドプロパティとして公開されているため、 、ビルドファイルで$ {Java.home}を使用することもできます。

Jre.homeはより良い名前でしょうか?たぶん、しかしサンはそれを変えるとは思わない。

Maven.batでmavenがJava_HOMEを使用していることがわかります。

:endInit
SET MAVEN_Java_EXE="%Java_HOME%\bin\Java.exe"
..
%MAVEN_Java_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% ..

確認したい場合は、mvn.batの「@echo off」ステートメントをコメントアウトして、使用されていることを確認できます。


TL; DR:提供された情報に基づいて、構成は正しく、何も変更する必要はありません。


編集:このスレッドのおかげで、 これが紛らわしい という問題もあり、Mavenバージョン3.5.4の出力が変更されました.

61
eis

Mvn/jdkの問題のデバッグに役立ったのは、mvnを実行する前にこれを設定することです:set MAVEN_BATCH_ECHO=on

MavenがJavaを選択する方法を含む詳細な出力(Windows)を取得します。