Java_home в Maven

Когда я запустил 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"

person One Two Three    schedule 07.03.2013    source источник


Ответы (2)


Нет, это не так. Он указывает на 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.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 - это каталог установки 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? Может быть, но я не думаю, что Sun это изменит.

Вы можете видеть, что 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: исходя из предоставленной вами информации, ваша конфигурация верна, ничего менять не нужно.


Изменить: благодаря этой теме также возникла проблема, связанная с тем, что это сбивает с толку, что привело к изменению вывода для Maven версии 3.5.4.

person eis    schedule 07.03.2013
comment
Спасибо! +1 за TL;DR;)) - person One Two Three; 08.03.2013
comment
Нет проблем. Может быть, примите, если вы считаете, что это ответ на вопрос :) - person eis; 08.03.2013
comment
@eis Привет, у меня проблема stackoverflow.com/questions/26313902/ здесь, не могли бы вы помочь мне разобраться. Спасибо. - person Kraken; 11.10.2014
comment
@Kraken, видимо, ты разобрался сам. Действительно, Maven необходим tools.jar. - person eis; 12.10.2014
comment
Это было сложнее, чем нужно. Не могли бы вы добавить инструкции по копированию JDK lib / tools.jar в / jre / lib? - person int lawl is over 9000; 06.01.2018
comment
@ intlawlisover9000 почему? вам определенно не стоит этого делать. - person eis; 07.01.2018

Что помогло мне отладить проблемы с mvn / jdk, так это установить это перед запуском mvn: set MAVEN_BATCH_ECHO=on

Вы получаете подробный вывод (в Windows), включая информацию о том, как Maven выбирает java.

person Johannes Schuitemaker    schedule 14.04.2019
comment
Когда я добавил JAVA_HOME в свою установку Windows 10, я ввел два каталога, разделенных точкой с запятой. Когда я удалил вторую запись, Windows оставила точку с запятой, которая появилась из-за этого параметра. - person Adam Howell; 26.02.2021