2017-10-12 11 views
8

지금 몇 달 동안 Git Bash (64 비트)에서 Maven을 사용하여 갑자기 작동을 멈추었습니다. 어떤 받는다는 명령에 오류 :이 일을 포함하여 SO에 대한 많은 질문을 검토 한Git for Windows (64 비트)에서 Maven classworlds.launcher.Launcher 오류가 발생했습니다.

[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의 최신 Git for Windows (2.14.2.windows.2)로 업그레이드했지만 문제가 남아 있습니다.

내 메이븐 설치는 C에 있습니다 : \ 아파치 받는다는-3.5.0 \ bin을 내 PATH 변수에 : 나는 또한 JAVA_HOME이 제대로 설정 한

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

:

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

나는 추가/MAVEN_HOME을 제거 시도했다 그러나 그것은 아파치 메이븐 시작 스크립트에서 검출하지 않는 것 (C : \ 아파치 받는다는-3.5.0 \ 빈 \의 MVN) :

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

Apache Maven 시작 스크립트로 들어가서 $ {MAVEN_HOME}의 인스턴스를 C : \ apache-maven-3.5.0으로 바꾸면 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_HOME 변수는 코드 섹션에서 삭제됩니다 Maven error in MINGW Git bash: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher에 동일하게 나타납니다 실현 :

# 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 

내가 불쾌한 줄을 실행할 경우떠들썩한 세션에서, 나는 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하지 . 명령이 서브 쉘에서 실행되기 때문에 이런 상황이 발생한다고 가정합니다.

[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의 coniguration과 git bash 버전을 자세히 공유 할 수 있습니까? – nullpointer

+0

@nullpointer thanks - 질문에 통합되었습니다. 자세한 정보가 필요하면 알려주세요. – mcknz

답변

1

테스트 할 첫번째 일은 %PATH%는 다음과 CMD 세션에서는, simplifiedPATH을 설정합니다.C:\WINDOWS\... 경로가 끝 PATH의에 을 유지하는 방법을

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% 

참고 :이 중요하다.

%JAVA_HOME%\bin<maven>\bin의 경로를 앞에 추가하십시오.

M2_HOMEC:\apache-maven-3.5.0으로 설정하십시오.

마지막으로, 모두 자식 강타 세션에서 (같은 윈도우에서) 현재 CMD, 또는에, 당신의 mvn 명령을 테스트 (입력 그냥 "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이 표시됩니다./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 :/c/WINDOWS :/c/WINDOWS/System32/Wbem :/c/WINDOWS/System32/WindowsPowerShell /v1.0 – mcknz