【问题标题】:Maven classworlds.launcher.Launcher error in Git for Windows (64-bit)Git for Windows(64 位)中的 Maven classworlds.launcher.Launcher 错误
【发布时间】:2018-04-17 22:00:34
【问题描述】:

我已经在 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

我已经查看了很多关于 SO 的问题,包括这个: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),但问题仍然存在。

我的 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:...

我也正确设置了 JAVA_HOME:

myuser@mypc MINGW64 ~ (master *)
$ echo $JAVA_HOME
C:\jdk1.7.0_79

我尝试添加/删除 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

如果我进入 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`

然后产生:

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"

这是一个不优雅的解决方法,宁愿找到合适的解决方案。我可以尝试哪些环境或配置更改以允许 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

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

经过进一步调试,我意识到我的问题似乎与 Maven error in MINGW Git bash: Could not find or load main class 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

如果我在 bash 会话中运行有问题的行 [[ -n "$MAVEN_HOME" ]] && MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`,我可以在最新的 Windows 版 Git 中重现该行为:

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 *) 
$

这是我直接执行命令时得到的——它返回当前目录,而不是我期望的 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

【问题讨论】:

  • 能否详细分享一下JAVA_HOME和MAVEN_HOME的配置以及使用的git bash版本。
  • @nullpointer 谢谢 - 已纳入问题,如果您需要更多信息,请告诉我。
  • 只是告诉我我将MAVEN_HOME=`(cd "$MAVEN_HOME" ; pwd)` 更改为MAVEN_HOME=$(cd "$MAVEN_HOME" ;pwd),它现在按预期工作。我不是一个很棒的 bash 脚本编写者,所以我现在真的不知道 2 之间的确切区别($()`()` 表示法),但它确实有所作为,这就是我会做的事情

标签: maven maven-3 git-bash git-for-windows


【解决方案1】:

首先要测试的是%PATH%:在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;%PATH%

注意C:\WINDOWS\... 路径是如何保留在 PATH 的末尾:这很重要。

然后添加 %JAVA_HOME%\bin<maven>\bin 的路径。

并确保将M2_HOME 设置为C:\apache-maven-3.5.0

最后,在当前 CMD 或(在同一 Windows 中)在 git bash 会话中测试您的 mvn 命令(只需键入“bash”)

最后,根据您的程序和操作系统品牌,不要忘记,在 Windows 10 中,您现在拥有WSL and a full-fledge Linux bash。这可能是一个可能的替代方案。

【讨论】:

  • 谢谢你——不幸的是我被这个卡在Win7上。我已将我的结果添加到问题中。这是否意味着我需要重新订购 PATH?
  • 是的,完全按照我的描述设置路径,剪掉所有不需要的东西。
  • 仍然无法在路径有限的 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 当你输入echo $M2_HOME 时你看到了什么?在您的 bash 会话中,尝试:export M2_HOME=/c/‌​apache-maven-3.5.0(没有尾随 bin/,如 stackoverflow.com/a/18155226/6309
  • 是的,我刚刚升级到 2.14.2.windows.3,问题仍然存在。我在我的问题中添加了更多关于我正在经历的问题的细节。我可能会尝试将适用于 Windows 的 Git 降级到早期版本,看看是否是问题所在。或者我可能只是注释掉 mvn 的那部分。 :)
猜你喜欢
  • 2017-10-08
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
相关资源
最近更新 更多