MAVEN_HOME, MVN_HOME или M2_HOME

86

Что такое правильный Maven имя переменной среды: MAVEN_HOME, MVN_HOMEили M2_HOME?

Я нашел некоторые подробности MAVEN_HOMEи M2_HOME здесь . Но я тоже видел MVN_HOMEвокруг.

кассиомолин
источник

Ответы:

64

Я лично никогда не считал полезным устанавливать M2_HOME.

Важна ваша среда $ PATH. Взяв часть ответа от Даникса, все, что вам нужно, это:

export PATH=/Users/xxx/sdk/apache-maven-3.0.5/bin:$PATH

mvnСкрипт вычисляет M2_HOMEдля вас в любом случае для чего это стоит.

Стив С
источник
3
+1. Я бы даже сказал, что настройка M2_HOMEв прошлом всегда приводила к странным ошибкам, в основном NoClassDefFoundErrorпотому, что mvnкоманда была найдена в PATH, но с другой версией Maven, найденной через M2_HOME. Моя жизнь стала лучше с тех пор, как я перестал устанавливать эту переменную env и полагаюсь только на добавление .../bin/mvnкаталога PATHи позволяю Maven автоматически определять вещи.
Батист Матус
6
«Я лично никогда не считал полезным устанавливать M2_HOME». И ты был прав. Это устарело: stackoverflow.com/a/47712646/270371
davidxxx
22

Вот моя настройка Maven. Вы можете использовать это как пример. Для использования Maven вам больше ничего не нужно.

M2_HOME используется как для Maven 2, так и для 3

export M2_HOME=/Users/xxx/sdk/apache-maven-3.0.5
export M2=$M2_HOME/bin
export MAVEN_OPTS="-Xmx1048m -Xms256m -XX:MaxPermSize=312M"
export PATH=$M2:$PATH
Даникс
источник
9

MAVEN_HOME используется для maven 1, а M2_HOME используется для поиска maven 2 . Наличие двух разных переменных _HOME означает, что их можно запускать на одном компьютере. И если вы проверите старые скрипты mvn.cmd, у них есть что-то вроде:

@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------

Видеть, что @REM M2_HOME - location of maven2's installed home dir

В любом случае использование этого шаблона теперь устарело в maven 3.5 согласно документации .

Из-за проблем с использованием M2_HOME, связанных с различными установленными версиями Maven, и для упрощения, использование M2_HOME было удалено и больше не поддерживается MNG-5823 , MNG-5836 , MNG-5607

Итак, теперь mvn.cmd выглядит так:

@REM -----------------------------------------------------------------------------
@REM Apache Maven Startup Script
@REM
@REM Environment Variable Prerequisites
@REM
@REM   JAVA_HOME          Must point at your Java Development Kit installation.
@REM   MAVEN_BATCH_ECHO  (Optional) Set to 'on' to enable the echoing of the batch commands.
@REM   MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending.
@REM   MAVEN_OPTS        (Optional) Java runtime options used when Maven is executed.
@REM   MAVEN_SKIP_RC     (Optional) Flag to disable loading of mavenrc files.
@REM -----------------------------------------------------------------------------

Итак, вам нужно правильно установить JAVA_HOME. Согласно новому руководству по установке (от 29.12.2017) , просто добавьте путь к каталогу maven bin в переменную PATH. Это должно сработать.

пример: export PATH=/opt/apache-maven-3.5.2/bin:$PATH

премьер
источник
1

Я наткнулся на это, как на шоколадные наборы M2_HOME. Я хотел найти settings.xml.

Текущий способ settings.xml- это пойти в %USERPROFILE%. Там содержится каталог .m2, где можно найти settings.xml.

Никогда не используйте M2_HOME. Он не поддерживается с Apache Maven 3.5.0.

Детали:

Из-за проблем с использованием, M2_HOMEсвязанных с различными установленными версиями Maven, и для упрощения, использование M2_HOMEбыло удалено и больше не поддерживается MNG-5823 , MNG-5836 , MNG-5607 .

Важное изменение для пользователей Windows: использование %HOME%было заменено на %USERPROFILE% MNG-6001.

Источник: https://maven.apache.org/docs/3.5.0/release-notes.html#overview-about-the-changes

Коппор
источник
-1

$M2_HOMEиногда используется, например, для установки Takari Extensions for Apache Maven

Один из способов найти $M2_HOMEценность - это поискать mvn:

sudo find / -name "mvn" 2>/dev/null

И, возможно, это будет: /opt/maven/

Imriss
источник
Я не вижу ничего на связанной странице, предполагающей, что что-то M2_HOMEчитается в Такари. Он просто использует переменную-заполнитель в примерах команд оболочки, которые вы можете запустить.
Джесси Глик
-2

Я решил ту же проблему со следующим:

export M2_HOME=/usr/share/maven
Мирослав Спасовский
источник
2
Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста , измените свой ответ , чтобы добавить объяснения и дать указание о том , что применять ограничения и допущения.
двойной звуковой сигнал
-7

У нас есть M2_HOME, MAVEN_HOME, M3_HOME, все они доступны на рынке.
Ранее M2_HOME - единственная переменная среды, используемая всеми как стандарт.
Но в связи с последними выпусками MAVEN_Home стал стандартным, но некоторые старые инструменты все еще пытаются найти только M2_HOME,
поэтому у нас должны быть как M2_HOME, так и MAVEN_HOME, чтобы поддерживать старые и новые инструменты.
M2_HOME также может использоваться для обоих

HariKishore
источник