MAVEN_HOME, MVN_HOME o M2_HOME

84

¿Cuál es la correcta Maven nombre de variable de entorno: MAVEN_HOME, MVN_HOMEo M2_HOME?

He encontrado algunos detalles sobre MAVEN_HOMEy M2_HOME aquí . Pero también he visto MVN_HOMEalrededor.

cassiomolina
fuente

Respuestas:

62

Personalmente, nunca me ha resultado útil configurar M2_HOME.

Lo que cuenta es su entorno $ PATH. Secuestrando parte de la respuesta de Danix, todo lo que necesitas es:

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

El mvnscript calcula M2_HOMEpor usted de todos modos lo que vale.

Steve C
fuente
3
+1. Incluso diría que la configuración M2_HOMEen el pasado siempre ha conducido a errores extraños, principalmente NoClassDefFoundErrorporque el mvncomando se encontraría en el PATH, pero con otra versión de Maven encontrada M2_HOME. Mi vida ha sido mejor desde que dejé de configurar esa variable env y solo confío en agregar .../bin/mvnel directorio PATHy dejar que Maven autodetecte cosas.
Baptiste Mathus
6
"Personalmente, nunca me ha resultado útil configurar M2_HOME". Y tenías razón. Eso está en desuso: stackoverflow.com/a/47712646/270371
davidxxx
22

Aquí está mi configuración de Maven. Puedes usarlo como ejemplo. No necesitas nada más para usar Maven.

M2_HOME se usa para Maven 2 y 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
Danix
fuente
8

MAVEN_HOME se usa para maven 1 y M2_HOME se usa para ubicar maven 2 . Tener las dos variables _HOME diferentes significa que es posible ejecutar ambas en la misma máquina. Y si revisa los antiguos scripts mvn.cmd , tienen algo como,

@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 ----------------------------------------------------------------------------

Mira eso @REM M2_HOME - location of maven2's installed home dir

De todos modos, el uso de este patrón ahora está obsoleto con maven 3.5 según la documentación .

Basado en problemas en el uso de M2_HOME relacionados con diferentes versiones de Maven instaladas y para simplificar las cosas, el uso de M2_HOME se ha eliminado y ya no es compatible MNG-5823 , MNG-5836 , MNG-5607

Así que ahora el mvn.cmd parece,

@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 -----------------------------------------------------------------------------

Entonces, lo que necesita es que JAVA_HOME esté configurado correctamente. Según la nueva guía de instalación (a partir del 29/12/2017) , simplemente agregue la ruta del directorio maven bin a la variable PATH. Debería funcionar.

ex: export PATH=/opt/apache-maven-3.5.2/bin:$PATH

principal
fuente
1

Me tropecé con esto como juegos de chocolate M2_HOME. Quería localizar settings.xml.

El camino actual para settings.xmles ir a %USERPROFILE%. Allí, .m2se contiene un directorio , donde se encuentra settings.xml.

Nunca use M2_HOME. No es compatible desde Apache Maven 3.5.0.

Detalles:

Basado en problemas de uso M2_HOMErelacionados con diferentes versiones de Maven instaladas y para simplificar las cosas, el uso de M2_HOMEha sido eliminado y ya no es compatible con MNG-5823 , MNG-5836 , MNG-5607 .

Cambio importante para los usuarios de Windows: el uso de %HOME%ha sido reemplazado por %USERPROFILE% MNG-6001

Fuente: https://maven.apache.org/docs/3.5.0/release-notes.html#overview-about-the-changes

koppor
fuente
-1

$M2_HOMEse utiliza a veces, por ejemplo, para instalar Takari Extensions for Apache Maven

Una forma de encontrar $M2_HOMEvalor es buscar mvn:

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

Y probablemente será: /opt/maven/

imriss
fuente
No veo nada en la página vinculada que sugiera que M2_HOMEalgo en Takari haya leído. Solo está usando una variable de marcador de posición en ejemplos de comandos de shell que podría ejecutar.
Jesse Glick
-2

He resuelto el mismo problema con lo siguiente:

export M2_HOME=/usr/share/maven
Miroslav Spasovski
fuente
2
Si bien este código puede resolver la pregunta, incluir una explicación de cómo y por qué esto resuelve el problema realmente ayudaría a mejorar la calidad de su publicación y probablemente resultaría en más votos a favor. Recuerde que está respondiendo la pregunta a los lectores en el futuro, no solo a la persona que pregunta ahora. Por favor, editar su respuesta para agregar explicaciones y dar una indicación de lo que se aplican limitaciones y supuestos.
doble pitido
-7

Tenemos M2_HOME, MAVEN_HOME, M3_HOME, todos están disponibles en el mercado.
Anteriormente, M2_HOME es la única variable de entorno utilizada por todos como estándar.
Pero, debido a las últimas versiones, MAVEN_Home venía como estándar, pero algunas herramientas antiguas todavía están tratando de encontrar solo M2_HOME,
por lo que deberíamos tener M2_HOME, MAVEN_HOME para mantener con herramientas antiguas y nuevas.
M2_HOME también se puede utilizar para ambos

HariKishore
fuente