mck*_*knz 10 maven-3 maven git-bash git-for-windows
我已经在Git Bash(64位)上使用Maven几个月了,突然它停止工作了,现在在任何maven命令上都会产生这个错误:
myuser@mypc MINGW64 ~ (master *)
$ mvn -v
Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher
Run Code Online (Sandbox Code Playgroud)
我已经回顾了很多关于SO的问题,包括这一个:Maven错误:找不到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher但是还没有解决我的问题.
我从2.12升级到最新的Git for Windows(2.14.2.windows.2),但问题仍然存在.
我的Maven安装位于C:\ apache-maven-3.5.0\bin,它位于我的PATH变量中:
myuser@mypc MINGW64 ~ (master *)
$ echo $PATH
...:/c/jdk1.7.0_79/bin:/c/apache-maven-3.5.0/bin:...
Run Code Online (Sandbox Code Playgroud)
我也正确设置了JAVA_HOME:
myuser@mypc MINGW64 ~ (master *)
$ echo $JAVA_HOME
C:\jdk1.7.0_79
Run Code Online (Sandbox Code Playgroud)
我已经尝试添加/删除MAVEN_HOME但是在Apache Maven启动脚本(C:\ apache-maven-3.5.0\bin\mvn)中似乎没有检测到:
myuser@mypc MINGW64 ~ (master *)
$ echo $MAVEN_HOME
c:\apache-maven-3.5.0
Run Code Online (Sandbox Code Playgroud)
如果我进入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`
Run Code Online (Sandbox Code Playgroud)
然后生产:
myuser@mypc 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"
Run Code Online (Sandbox Code Playgroud)
这是一个不优雅的解决方法,宁愿找到合适的解决方案.我可以尝试哪些环境或配置更改,以允许Maven在没有硬编码路径的情况下运行?
VonC答案的步骤/结果:
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
myuser@mypc MINGW64 /c/Windows/System32
$ mvn -v
Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher
myuser@mypc MINGW64 /c/Windows/System32
$ echo $M2_HOME
C:\apache-maven-3.5.0
S279887@P2025774 MINGW64 /c/Windows/System32
$ echo $MAVEN_HOME
c:\apache-maven-3.5.0
Run Code Online (Sandbox Code Playgroud)
进一步调试后,我意识到我的问题似乎与MINGW Git bash中的Maven错误相同:无法找到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher,其中MAVEN_HOME变量在此代码段中被清除:
# 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
Run Code Online (Sandbox Code Playgroud)
如果我[[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`在bash会话中运行违规行,我可以在最新的Git for Windows中重现行为:
myuser@mypc MINGW64 ~ (master *)
$ git --version
git version 2.14.2.windows.3
myuser@mypc MINGW64 ~ (master *)
$ echo $MAVEN_HOME
c:\apache-maven-3.5.0
myuser@mypc MINGW64 ~ (master *)
$ [[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
myuser@mypc MINGW64 ~ (master *)
$ echo $MAVEN_HOME
myuser@mypc MINGW64 ~ (master *)
$
Run Code Online (Sandbox Code Playgroud)
这是我直接执行命令时得到的 - 它返回当前目录而不是我期望的MAVEN_HOME.假设发生这种情况是因为命令在子shell中执行?
myuser@mypc MINGW64 ~ (master *)
$ echo `(cd "$MAVEN_HOME"; pwd)`
/c/home
myuser@mypc MINGW64 ~ (master *)
$ `(cd "$MAVEN_HOME"; pwd)`
bash: /c/home: Is a directory
Run Code Online (Sandbox Code Playgroud)
首先要测试的是%PATH%:在 CMD 会话中,设置一个简化的 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%
Run Code Online (Sandbox Code Playgroud)
请注意路径如何C:\WINDOWS\...保留在PATH 的末尾:这很重要。
%JAVA_HOME%\bin然后在前面添加您的, 和 的路径<maven>\bin。
并确保设置M2_HOME为C:\apache-maven-3.5.0.
最后,mvn在当前的 CMD 中或(在同一 Windows 中)在 git bash 会话中(仅键入“ bash”)测试您的命令
最后,根据您的程序和操作系统品牌,不要忘记,在 Windows 10 中您现在拥有WSL 和成熟的 Linux bash。这可能是一个可能的替代方案。
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |