MAVEN_HOME, MVN_HOME lub M2_HOME


86

Jaka jest poprawna nazwa zmiennej środowiskowej Maven: MAVEN_HOME, MVN_HOMElub M2_HOME?

Znalazłem kilka szczegółów na temat MAVEN_HOMEi M2_HOME tutaj . Ale ja też się MVN_HOMErozejrzałam.

Odpowiedzi:


64

Osobiście nigdy nie uważałem za przydatne ustawianie M2_HOME.

Liczy się twoje środowisko $ PATH. Po przejęciu części odpowiedzi od firmy Danix wystarczy:

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

mvnSkrypt obliczy M2_HOMEdla Ciebie i tak za to, co warto.


3
+1. Powiedziałbym nawet, że ustawienie M2_HOMEw przeszłości zawsze prowadziło do dziwnych błędów, głównie NoClassDefFoundErrordlatego, że mvnpolecenie zostało znalezione w PATH, ale z inną wersją Mavena znalezioną M2_HOME. Moje życie było lepsze, odkąd przestałem ustawiać tę zmienną env i polegam tylko na dodaniu .../bin/mvnkatalogu do PATHi pozwoleniu Mavenowi na automatyczne wykrywanie rzeczy.
Baptiste Mathus

6
„Osobiście nigdy nie uważałem za przydatne ustawienie M2_HOME”. I miałeś rację. To jest przestarzałe: stackoverflow.com/a/47712646/270371
davidxxx


22

Oto moja konfiguracja Mavena. Możesz użyć tego jako przykładu. Nie potrzebujesz niczego więcej do korzystania z Mavena.

M2_HOME jest używany zarówno dla Maven 2, jak i 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 jest używany do mavena 1, a M2_HOME do lokalizowania mavena 2 . Posiadanie dwóch różnych zmiennych _HOME oznacza, że ​​można uruchomić je na tym samym komputerze. A jeśli sprawdzisz stare skrypty mvn.cmd , mają one coś takiego:

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

Zobaczyć, że @REM M2_HOME - location of maven2's installed home dir

W każdym razie użycie tego wzorca jest obecnie przestarzałe w maven 3.5, zgodnie z dokumentacją .

W oparciu o problemy z używaniem M2_HOME związane z różnymi zainstalowanymi wersjami Mavena i dla uproszczenia, użycie M2_HOME zostało usunięte i nie jest już obsługiwane MNG-5823 , MNG-5836 , MNG-5607

Więc teraz mvn.cmd wygląda następująco:

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

Więc to, czego potrzebujesz, to JAVA_HOME, aby był poprawnie ustawiony. Zgodnie z nowym przewodnikiem instalacji (stan na 29.12.2017) , po prostu dodaj ścieżkę katalogu maven bin do zmiennej PATH. To powinno załatwić sprawę.

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


1

Natknąłem się na to jako czekoladowe zestawy M2_HOME. Chciałem zlokalizować settings.xml.

Obecnym sposobem settings.xmljest przejście do %USERPROFILE%. Tam .m2zawarty jest katalog , w którym można znaleźć settings.xml.

Nigdy nie używaj M2_HOME. Nie jest obsługiwany od wersji Apache Maven 3.5.0.

Detale:

W związku z problemami M2_HOMEzwiązanymi z używaniem różnych zainstalowanych wersji Mavena i dla uproszczenia, użycie M2_HOMEzostało usunięte i nie jest już obsługiwane MNG-5823 , MNG-5836 , MNG-5607 .

Ważna zmiana dla użytkowników systemu Windows: użycie %HOME%zostało zastąpione przez %USERPROFILE% MNG-6001

Źródło: https://maven.apache.org/docs/3.5.0/release-notes.html#overview-about-the-changes


-1

$M2_HOMEjest czasami używany na przykład do instalacji Takari Extensions for Apache Maven

Jednym ze sposobów znalezienia $M2_HOMEwartości jest wyszukanie mvn:

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

I prawdopodobnie będzie to: /opt/maven/


Nie widzę niczego na połączonej stronie, co sugerowałoby, że M2_HOMEcoś czytało w Takari. Jest to po prostu użycie zmiennej zastępczej w przykładach poleceń powłoki, które można uruchomić.
Jesse Glick

-2

Rozwiązałem ten sam problem z następującymi:

export M2_HOME=/usr/share/maven

2
Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
podwójny sygnał

-7

Mamy M2_HOME, MAVEN_HOME, M3_HOME - wszystkie są dostępne na rynku
Poprzednio M2_HOME jest jedyną zmienną środowiskową używaną przez wszystkich jako standard.
Ale z powodu ostatnich wydań MAVEN_Home stał się standardem, ale niektóre stare narzędzia wciąż próbują znaleźć tylko M2_HOME,
więc powinniśmy mieć zarówno M2_HOME, jak i MAVEN_HOME, aby utrzymać stare i nowe narzędzia.
M2_HOME może być również używany do obu

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.