2017-10-12 152 views
8

我一直在Git Bash(64位)上使用Maven幾個月,現在突然停止工作,現在正在生成這個錯誤在任何Maven的命令:Maven classworlds.launcher.Launcher錯誤Git for Windows(64位)

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

我已經審查了這麼多問題,包括這個:Maven error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher,但並沒有解決我的問題。

我已經從2.12升級到Windows的最新Git(2.14.2.windows.2),但問題依然存在。

我的Maven安裝在C:\ Apache的行家-3.5.0 \ bin中,這是在我的PATH變量:

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

我也JAVA_HOME設置正確:

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

我試着添加/刪除MAVEN_HOME但是這似乎並沒有在Apache Maven的啓動腳本來進行檢測(C:\ Apache的行家-3.5.0 \ BIN \ MVN):

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

如果我進入Apache Maven Startup Script並用C:\ apache-maven-3.5.0替換$ {MAVEN_HOME}的實例,那麼它似乎找到Launcher類並正確執行。

編輯是這樣的:

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

繼而產生:

[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" 

這是一個不雅的解決辦法,而寧願找到合適的解決方案。我可以嘗試哪些環境或配置更改,以便Maven能夠在不對路徑進行硬編碼的情況下運行?


步驟/結果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 

進一步調試之後,我認識我的問題似乎是相同Maven error in MINGW Git bash: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher,其中MAVEN_HOME變量被在這一段代碼清零:如果我運行違規行[[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`在bash會話,我可以重現在最新的Git的行爲適用於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 *) 
$ 

這是我所得到的,當我直接執行該命令 - 它返回當前目錄下,而不是作爲MAVEN_HOME我期望。假設這是因爲該命令在子shell中執行?

[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

您是否可以共享使用中的JAVA_HOME和MAVEN_HOME配置以及git bash版本。 – nullpointer

+0

@nullpointer謝謝 - 已納入問題,讓我知道如果你需要更多的信息。 – mcknz

回答

1

測試的第一件事是%PATH%:在CMD會議,成立了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% 

注意C:\WINDOWS\...路徑是如何在最後的路徑保持:這是很重要的。

然後預先設定您的%JAVA_HOME%\bin<maven>\bin的路徑。

並確保將M2_HOME設置爲C:\apache-maven-3.5.0

最後,測試你的mvn命令,無論是在一個Git bash命令當前CMD,或(在相同的Windows)(只鍵入「bash」)

最後,這取決於你的計劃和你的品牌操作系統,不要忘記,與Windows 10,你現在有WSL and a full-fledge Linux bash。這可能是一個可能的選擇。

+0

謝謝 - 不幸的是我被困在Win7上。我已將我的結果添加到問題中。這是否意味着我需要重新訂購我的PATH? – mcknz

+0

是的,完全按照我描述的方式設置你的路徑,切割一切不需要的東西。 – VonC

+0

仍然無法在限制路徑的bash中工作 - 當我在CMD窗口中鍵入「bash」時,我的PATH顯示爲/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