Java_home в Maven

27

Когда я запустил mvn -version, я заметил, что java_home указывает на ...jdk\jre (как показано ниже). Это неправильно? Разве это не должно указывать на ...\jdk.x.y.z (без \jre)? Если да, то как это сделать reset? (В глобальном %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"
Теги:
maven
java-home

1 ответ

48
Лучший ответ

Нет, это не так. Это указывает на JRE, используемый вашим JDK, и это то, что он должен был. Если вы распечатываете JAVA_HOME вне maven, он должен печатать правильно:

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 фактически использует jre в JDK для запуска.

При использовании 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 используется с самого начала и теперь соглашение.

java.home - это каталог установки JRE, например C:\jdk5\jre, или C:\Program Files\Java\jre1.5.0_06. В отличие от JAVA_HOME, я никогда не видел java.home как переменная среды. java.home - встроенная Java системное свойство, значением которого является каталог установки JRE. Поскольку все Свойства системы Java также отображаются как свойства Ant build, вы также может использовать ${java.home} в файлах сборки.

Будет ли jre.home лучшим именем? Может быть, но я не думаю, что Солнце измените его.

Вы можете видеть, что maven использует JAVA_HOME на mvn.bat:

:endInit
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
..
%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% ..

И если вы хотите убедиться, вы можете прокомментировать выражение "@echo off" в mvn.bat, чтобы вы могли видеть, что он используется.


TL; DR: на основании информации, которую вы указали, ваша конфигурация верна, не нужно ничего менять.


Изменить: теперь есть проблема с запуском этого путаницы. Возможно, они изменят его в будущем.

  • 0
    Спасибо! +1 за TL;DR ;))
  • 0
    Нет проблем. Возможно, примите, если вы чувствуете, что ответили на вопрос :)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню