43

私が走ったとき、私は(以下に示すように)へのポイント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"
4

2 に答える 2

71

いいえ、それは間違っていません。これは、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 と等しくないことがわかります。これは予期されることです。

これを引用:

JAVA_HOME と java.home の違いは何ですか?

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

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

jre.home の方が適切な名前でしょうか? たぶん、でも Sun がそれを変えるとは思いません。

maven が mvn.bat で 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 の出力が変更されました。

于 2013-03-07T19:06:32.143 に答える