首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git中的Maven classworlds.launcher.Launcher错误(64位)

Git中的Maven classworlds.launcher.Launcher错误(64位)
EN

Stack Overflow用户
提问于 2017-10-12 20:38:43
回答 1查看 1.3K关注 0票数 10

我在Git Bash (64位)上使用Maven已经有几个月了,突然它停止工作,现在正在对任何maven命令生成这个错误:

代码语言:javascript
复制
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升级到最新的Git for Windows (2.14.2.windows.2),但问题仍然存在。

我的Maven安装在C:\apache-maven-3.5.0\bin,它位于我的PATH变量中:

代码语言:javascript
复制
myuser@mypc MINGW64 ~ (master *)
$ echo $PATH
...:/c/jdk1.7.0_79/bin:/c/apache-maven-3.5.0/bin:...

我还正确地设置了JAVA_HOME:

代码语言:javascript
复制
myuser@mypc MINGW64 ~ (master *)
$ echo $JAVA_HOME
C:\jdk1.7.0_79

我尝试过添加/删除MAVEN_HOME,但在Apache启动脚本(C:\apache 3.5.0\bin\mvn)中似乎没有检测到这一点:

代码语言:javascript
复制
myuser@mypc MINGW64 ~ (master *)
$ echo $MAVEN_HOME
c:\apache-maven-3.5.0

如果我进入Apache启动脚本,用C:\apache- Maven -3.5.0替换${MAVEN_HOME}的实例,那么它似乎找到了Launcher类并正确执行。

编辑如下:

代码语言:javascript
复制
CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
  to
CLASSWORLDS_JAR=`echo /c/apache-maven-3.5.0/boot/plexus-classworlds-*.jar`

然后生产:

代码语言:javascript
复制
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在不对路径进行硬编码的情况下运行?

冯克的回答的步骤/结果

代码语言:javascript
复制
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错误:找不到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher完全相同,MAVEN_HOME变量在本节代码中被清除:

代码语言:javascript
复制
# 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)`,我可以在最新的Git中再现这种行为:

代码语言:javascript
复制
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。假设发生这种情况是因为命令在子subshell中执行?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-10-16 19:47:27

首先要测试的是%PATH%:在CMD会话中,设置一个PATH

代码语言:javascript
复制
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<maven>\bin的路径放在前面。

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

最后,测试您的mvn命令,无论是在当前的CMD中还是在git会话中(输入"bash")。

最后,根据你的程序和你的操作系统品牌,别忘了用Windows 10你现在有了WSL和一个完全灵活的Linux bash。这可能是另一种选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46718502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档