MINGW Git bash中的Maven错误:无法找到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher

时间:2017-07-29 15:44:50

标签: windows bash maven mingw

我意识到这个问题已在几个问题中讨论过,但没有答案解决了我的具体问题。

我已经安装了Git bash和Maven,我试图用Git bash执行Maven。它与上述错误一起中止。

我的系统环境:

Windows 7
Git 2.13.3
Maven 3.5.0

所需的用户变量:

HOME=%HOMEPATH%
M3_HOME=%MAVEN_HOME%
MAVEN_HOME=path-with-no-blanks
Path=%MAVEN_HOME%\bin

Maven在Windows命令提示符和Cygwin上运行正常。只有基于MINGW的Git bash失败。

我检查了mvn

下的bash脚本C:\path\to\maven\bin

通过设置日志输出并检查MAVEN_HOME值何时丢失,我发现它被这些语句清除(即使JAVA_HOME):

# For MinGW, ensure paths are in Unix format before anything is touched !!!HERE MAVEN_HOME value is getting lost!!!
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机器上(不同版本的Maven和Git),相同的行有点不同:

M2_HOME="`(cd "$MAVEN_HOME"; pwd)`"

而不是:

MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`

首先,我认为这是由于引用字符的种类。但是工作的Windows机器甚至可以运行我失败的Windows机器上的新脚本。我也尝试安装旧的Git或更老的Maven - 没有任何帮助。

为什么提到的bash脚本行会清除MAVEN_HOME变量?

2 个答案:

答案 0 :(得分:2)

我得到完全相同的错误一段时间,直到我意识到它是由我的防病毒软件(Comodo)造成的。如果我退出/禁用Comodo,Git bash将无法正常甚至

因此,如果您有Comodo,请尝试按照以下步骤修复错误(如果您不这样做,那么可能尝试使用您正在使用的任何防病毒/防火墙执行类似的操作):

  1. Comodo->设置 - >文件评分 - >添加文件夹(Git文件夹)。最终添加了超过5000个可信文件(但它有助于解决问题)。

  2. Comodo-> Settings-> Advanced Protection-> Miscellaneous->并找到“不要检测...中的shellcode注入”复选标记。我将整个Git文件夹添加到shellcode注入中。

  3. 我在Comodo中将git文件夹设置为“ignore” - > Settings-> containment->“Auto-containment”

  4. 我将补充一点,我不确定是否需要执行所有步骤,因此请随意逐个执行,看看有哪些帮助。

答案 1 :(得分:1)

  

在Windows 7计算机上遇到完全相同的问题。在一夜之间发生,在git / mingw64,maven或java中没有版本更改。

您可以考虑的第一个测试是PATH问题(OP实际上提到了错误的Path=%MAVEN_HOME%\bin

在CMD会话(因此仅限于该会话)中使用simplified 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;%MAVEN_HOME%\bin;%PATH%
set PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%PATH%

如果您希望在bash会话中使用类似的$ PATH,可以在.bashrc中采用相同的想法,方法是在CMD中键入带有简化路径的bash

然后;在这种情况下,您可以再次检查问题是否仍然存在。