当前位置: 首页 > 知识库问答 >
问题:

Maven ClassWorlds.Launcher.Launcher在Git for Windows(64位)中出错

吕永嘉
2023-03-14

我在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错误:无法找到或加载主类org.codehaus.plexus.ClassWorlds.Launcher.Launcher,但没有解决我的问题。

我已经从2.12升级到了最新的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启动脚本,并用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`

然后生成:

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在不硬编码路径的情况下运行?

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
# 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
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

共有1个答案

宣冥夜
2023-03-14

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

注意C:\Windows\...路径是如何保持在路径的末尾的:这一点很重要。

然后前置%JAVA_HOME%\bin \bin 的路径。

并确保将m2_home设置为c:\apache-maven-3.5.0

最后,测试您的mvn命令,可以在当前CMD中,也可以在git bash会话中(只需键入“bash”)

最后,根据您的程序和您的操作系统品牌,不要忘记,在Windows10中,您现在有了WSL和完整的Linux bash。这是一个可能的替代方案。

 类似资料:
  • 问题内容: 我想知道x86和x64中的64位长吗? 问题答案: 是。Java 在任何JVM上都是64位,无一例外。所有Java原语类型都是完全可移植的,并且在所有实现中都具有固定的大小。

  • 问题内容: 在64位计算机上,Java中的int大小是32位还是64位? 问题答案: 32位。这是Java语言的功能之一,整数的大小不会随基础计算机而变化。请参阅规范的相关部分。

  • 问题内容: 我正在看《A Tour of Go》,我对他们的basic- types.go示例感到困惑: 难道不应该在无符号的64位整数中向左移动1 64个位置会导致溢出(也就是比MSB高一点)吗? 但是,直到该行更改为:编译器才会抱怨: 如果我编写一些代码以迭代不同长度的左移,包括如上例中那样导致导致编译器发声的左移65,我会看到两件事: 它的行为符合我的预期,因为它会将uint64中的1放置在

  • 问题内容: 在C语言中,在64位系统上long为64位。这反映在Python的ctypes模块中吗? 问题答案: 的大小 取决于内存模型。在Windows(LLP64)上是32位,在UNIX(LP64)上是64位。 如果需要64位整数,请使用。 如果需要指针大小的整数,请使用(“该值表示为整数”)。

  • 标题说明了一切。我确实看到过类似的问题,有人建议关于http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame,但是所有的pygame可下载文件都是.whl格式的,我不知道如何在Windows7上运行。我尝试了“CD[directory]>pip安装[filename]”,但没有成功。

  • 问题内容: 是否有C宏或某种方式可以检查我的C程序在C编译时是编译为64位还是32位? 编译器:我需要检查的GCC操作系统:Unix / Linux 另外,在运行程序时如何检查操作系统是否支持64位? 问题答案: 由于您标记了此“ gcc”,请尝试