2017-10-12 96 views
8

Używam Mavena na Git Bash (64-bit) przez kilka miesięcy i nagle przestał działać, a teraz generuje to błąd na jakiekolwiek polecenia maven:Błąd klasy Maven classworlds.launcher.Launcher w systemie Git dla systemu Windows (64-bit)

[email protected] MINGW64 ~ (master *) 
$ mvn -v 
Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher 

Sprawdziliśmy wiele pytań na temat tego, w tym ten jeden: Maven error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher ale nie rozwiązały mój problem.

Mam zaktualizowany do najnowszej wersji Git dla Windows (2.14.2.windows.2) z 2.12, ale problem pozostaje.

Moja instalacja Maven jest w C: \ apache-Maven-3.5.0 \ bin, który jest w moim zmiennej PATH:

[email protected] MINGW64 ~ (master *) 
$ echo $PATH 
...:/c/jdk1.7.0_79/bin:/c/apache-maven-3.5.0/bin:... 

Ja też JAVA_HOME ustawiony prawidłowo:

[email protected] MINGW64 ~ (master *) 
$ echo $JAVA_HOME 
C:\jdk1.7.0_79 

próbowałem dodawanie/usuwanie MAVEN_HOME ale to nie wydaje się być wykryte w Apache Maven Startup Script (C: \ apache-Maven-3.5.0 \ bin \ mvn):

[email protected] MINGW64 ~ (master *) 
$ echo $MAVEN_HOME 
c:\apache-maven-3.5.0 

Jeśli przejdę do skryptu uruchamiania Apache Maven i zastąpię instancję $ {MAVEN_HOME} przez C: \ apache-maven-3.5.0, to wygląda na to, że klasa Launcher jest poprawnie uruchamiana.

Edits takie jak ten:

CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar` 
    to 
CLASSWORLDS_JAR=`echo /c/apache-maven-3.5.0/boot/plexus-classworlds-*.jar` 

następnie produkują:

[email protected] MINGW64 ~ (master *) 
$ mvn -v 
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T15:39:06-04:00) 
Maven home: C:\apache-maven-3.5.0 
Java version: 1.7.0_79, vendor: Oracle Corporation 
Java home: C:\jdk1.7.0_79\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows" 

To nieeleganckie obejście, a raczej znalezienie właściwego rozwiązania. Jakie zmiany środowiska lub konfiguracji mogę wypróbować, aby umożliwić Maven uruchamianie bez twardego kodowania ścieżki?


Kroki/Wyniki dla VonC's answer:

Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\windows\system32>set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ 
C:\windows\system32>set GH=C:\Program Files\Git 
C:\windows\system32>set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH% 
C:\windows\system32>set PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%PATH% 

C:\windows\system32>echo %PATH% 
C:\jdk1.7.0_79\bin;c:\apache-maven-3.5.0\bin;C:\Program Files\Git\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Git\mingw64\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ 

C:\windows\system32>echo %M2_HOME% 
C:\apache-maven-3.5.0 

C:\windows\system32>mvn -v 
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T15:39:06-04:00) 
Maven home: c:\apache-maven-3.5.0\bin\.. 
Java version: 1.7.0_79, vendor: Oracle Corporation 
Java home: C:\jdk1.7.0_79\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows" 

C:\Windows\System32>bash 

[email protected] MINGW64 /c/Windows/System32 
$ mvn -v 
Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher 

[email protected] MINGW64 /c/Windows/System32 
$ echo $M2_HOME 
C:\apache-maven-3.5.0 

[email protected] MINGW64 /c/Windows/System32 
$ echo $MAVEN_HOME 
c:\apache-maven-3.5.0 

Po dalszych debugowania, zdałem sobie sprawę, mój problem wydaje się być identyczna Maven error in MINGW Git bash: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher, gdzie zmienna MAVEN_HOME zostanie rozliczone w tej sekcji kodu:

# For MinGW, ensure paths are in Unix format before anything is touched 
if $mingw ; then 
    [ -n "$MAVEN_HOME" ] && 
    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)` 
    [ -n "$JAVA_HOME" ] && 
    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)` 
    # TODO classpath? 
fi 

Jeśli uruchomię nieodpowiednią linię [[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)` w sesji bash, mogę powielać zachowanie w najnowszej Git na Windows:

[email protected] MINGW64 ~ (master *) 
$ git --version 
git version 2.14.2.windows.3 

[email protected] MINGW64 ~ (master *) 
$ echo $MAVEN_HOME 
c:\apache-maven-3.5.0 

[email protected] MINGW64 ~ (master *) 
$ [[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)` 

[email protected] MINGW64 ~ (master *) 
$ echo $MAVEN_HOME 


[email protected] MINGW64 ~ (master *) 
$ 

To co mam, kiedy wykonać polecenie bezpośrednio - zwraca bieżący katalog i nie MAVEN_HOME jak spodziewałbym . Zakładając, że tak się dzieje, ponieważ polecenie wykonuje się w podpowłoce?

[email protected] MINGW64 ~ (master *) 
$ echo `(cd "$MAVEN_HOME"; pwd)` 
/c/home 

[email protected] MINGW64 ~ (master *) 
$ `(cd "$MAVEN_HOME"; pwd)` 
bash: /c/home: Is a directory 
+0

Można również szczegółowo opisać konfigurację JAVA_HOME i MAVEN_HOME oraz wersję bitu git. – nullpointer

+0

@Nullpointer dzięki - wprowadzono w pytanie, daj mi znać, jeśli potrzebujesz więcej informacji. – mcknz

Odpowiedz

1

Pierwszą rzeczą do sprawdzenia jest %PATH%: w sesji CMD, utwórz simplifiedPATH.

set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ 
set GH=C:\path\to\git 
set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH% 

Uwaga jak C:\WINDOWS\... ścieżki są przechowywane na koniec ścieżki: to jest bardzo ważne.

Następnie dodaj ścieżkę swojego %JAVA_HOME%\bin i <maven>\bin.

Pamiętaj, aby ustawić M2_HOME na C:\apache-maven-3.5.0.

Wreszcie przetestować polecenie mvn, zarówno w bieżącym CMD, albo (w tym samym systemie Windows) w sesji git bash (wpisując po prostu „bash”)

Wreszcie, w zależności od programu i swojej marki OS, nie zapomnij, że w systemie Windows 10 masz teraz WSL and a full-fledge Linux bash. To może być możliwa alternatywa.

+0

Dziękuję - niestety utknąłem na Win7 tym razem. Dodałem moje wyniki do pytania. Czy to oznacza, że ​​muszę zmienić kolejność mojej zmiennej PATH? – mcknz

+0

Tak, ustaw ścieżkę dokładnie tak, jak opisuję, wycinając wszystko, co nie jest potrzebne. – VonC

+0

nadal nie działa w bashu z ograniczoną ścieżką - kiedy wpisuję "bash" w oknie CMD, moja PATH wyświetla się jako /mingw64/bin:/usr/bin:/c/dotfiles/bin:/c/jdk1.7.0 _79/bin: /c/apache-maven-3.5.0/bin: /c/jdk1.7.0_79: /c/apache-maven-3.5.0:/bin:/usr/bin:/mingw64/bin:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/System32/WindowsPowerShell /v1.0 – mcknz