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
Można również szczegółowo opisać konfigurację JAVA_HOME i MAVEN_HOME oraz wersję bitu git. – nullpointer
@Nullpointer dzięki - wprowadzono w pytanie, daj mi znać, jeśli potrzebujesz więcej informacji. – mcknz