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


136

我已经maven-3.0.4Windows 7上安装了最新版本
安装详细信息如下:
安装路径:

C:\apache-maven-3.0.4  

环境变量是:

M2_HOME C:\apache-maven-3.0.4\apache-maven\src  
JAVA_HOME C:\Program Files\Java\jdk-1.7.0_04  

添加的路径变量是:

%M2_HOME%\bin;%JAVA_HOME%\bin;

在命令窗口中,它显示如下:

C:\>java -version  
java version "1.7.0_04"  
Java(TM) SE Runtime Environment (build 1.7.0_04-b22)  
Java HotSpot(TM) Client VM (build 23.0-b21, mixed mode, sharing)  
C:\>mvn -version  
Error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher  

这是在我的PC上安装的maven上的唯一版本,许多博客上给出的解决方案均指删除先前的M2_HOME环境变量是无效的。

我已经阅读并尝试了博客提供的所有解决方案,例如:

但仍然无法实现。在整个事情上我可能会缺少什么?提前致谢。


4
刚下载二进制文件 zip,它就坏了。替换为.tar.gz和它起作用。因此,当M2_HOME正确设置时,请尝试检查下载的内容是否正确。
Pavel Horal

@PavelHoral我也遇到了同样的情况
hoaphumanoid

我只能通过像mvn compile一样的命令在这个詹金斯身上得到这个错误!
Nullpointer

Answers:


141

我也遇到了这个问题,并找到了这篇文章。对于Maven3,将环境变量名称从M2_HOME更改为M3_HOME可以解决问题。我在运行带有JDK 1.7的OSX 10.9的Mac上。希望这可以帮助。

注意:如果已设置,请删除M2_HOME。例如:unset M2_HOME


26
在Mac上对我也一样。确保删除M2_HOME
Luke

在Ubuntu上使用Maven 3.3.3二进制文件。未设置JAVA_HOME。
TFuto

2
从Mac OS 10.10.5开始,安装了brew安装的maven(3.3.3)。
耶利米

@卢克谢谢!unset M2_HOME
Jared Burrows

5
此解决方案有效,但并非出于您可能认为的原因。这个问题,在指出一些的的评论被引用的文章,是不是M3_HOME需要,而不是,而是M2_HOME定义不正确。似乎根本没有使用M3_HOME,因此基本上发生的是删除M2_HOME时使用的是默认值。
马特

64

即使回答了问题,我也想补充一点,如果遇到上述错误,请确保已下载Binary文件

仅当您是高级用户并且知道如何处理时,才应下载源文件。

老年人和大三学生中下载错误文件的人很多


1
我实际上是故意下载源代码的,因为这是传统的处理方式,但是我不小心遵循了二进制安装的说明。从长远来看,仅复制二进制tar实际上更容易。
MDMoore313 2014年

+1:同样的事情在这里发生-意外点击了错误的下载链接。工程不是我得到了正确的zip文件!
劳拉·里奇2014年

这是我自己解决的问题-谢谢!
Liran H

真正。下载了源文件,并尝试更新M3_HOME,但无效。二进制文件工作良好。
罗希特(Rohit)

刚发生在我身上。该网站不清楚该使用哪个网站。
frodo2975 '16

60

我遇到了同样的问题,并且能够通过认真地重做环境变量来解决它:

  • M2_HOME
  • M2
  • JAVA_HOME

另外,我使它们成为所有系统变量,而不是像Maven指令所说的那样是用户变量。当你

echo %Path%

确保您可以看到%M2%和%JAVA_HOME%变量完全展开,即:

C:\Users\afairchild>echo %Path%
C:\Program Files\Apache Software Foundation\apache-maven-3.0.4\bin;C:\Program Files\Java\jdk1.7.0_09\bin; [etc]

M2_HOME是检查您是否要升级的第一件事。JAVA_HOME应该保持不变。
Joe Leo

3
如何使用M2环境变量?我只有JAVA_HOMEM2_HOME
Kevin Meredith 2014年

1
@KevinMeredith:M2有时使用环境变量来指示%M2_HOME\bin%路径,然后将其添加到%Path%环境变量中。当在定义mvn.bat的标准%Path%条目中找不到Maven批处理文件时,这是必需的。典型的用例是Maven的非标准安装目录。
Moreaki

@Alex我只能通过诸如mvn compile这样的命令在此詹金斯身上得到此错误!
Nullpointer

49

尽管安装是由apt-get完成的,但在两个不同的Ubuntu 12.04安装中都存在此问题。问题是M2_HOME。

固定于:

export M2_HOME=/usr/share/maven

2
它对我有用,但是与M2_HOME = / usr / share / maven2一起使用(以防其他人尝试)。谢谢!
jimkont

1
在Ubuntu上,最好使用您指向的命令创建/etc/profile.d/maven.sh export M2_HOME=/usr/share/maven。正如@jimkont指出的,有时是maven2或maven3(当然,如果安装了maven3)。
Rael Gugelmin Cunha 2013年

有用。谢谢。但是我们可以将其添加到/ etc / environtment文件中吗?
karthik '16

35

我相信此错误是由于从Maven网站下载了SRC而不是BINARY引起的。请确保下载Binary zip。

因为下面的路径,仅在下载SRC时您将获得:

M2_HOME C:\ apache-maven-3.0.4 \ apache-maven \ src

在此处输入图片说明


这对我有用。按照此处的指南进行操作:maven.apache.org/install.html并使用C:\ apache-maven-3.6.3 \ bin设置系统PATH变量
ChrisE

21

听起来您是根据路径信息安装(提取)了源文件而不是二进制文件。尝试安装二进制文件,然后遵循其他张贴者的回答。


感谢固定我的也。但是,为什么只要bin目录中包含正确的可执行文件,您为什么也不能使用src下载?
java123999 '16

13

好吧,我遇到了这个问题,看到这篇文章,尤其是khmarbaise回答后,我注意到这M2_HOME

D:\workspace\apache-maven-3.1.0-bin\apache-maven-3.1.0\bin

然后我把它赶到

D:\workspace\apache-maven-3.1.0-bin\apache-maven-3.1.0

我想提到我使用Windows 7(x64)


我只能通过像mvn compile一样的命令在这个詹金斯身上得到这个错误!
Nullpointer

6

Maven更高版本的解决方案是直接的。我使用的是OS X ElCap 10.11.6,并已升级到Maven 3.3.9。我也遇到了错误“ Could not find ...org.codehaus.plexus...”的问题。此处提供的链接在McKamey的评论中提供了解决方案-只需删除M2_HOME(unset M2_HOME)。一旦我尝试了,一切都会按预期进行。

可以通过以下方式确认:访问Maven install page“将创建的目录apache-maven-3.3.9的bin目录添加到PATH环境变量中” –完全没有提及M2_HOME或M3_HOME。


4

您应该将M2_HOME的位置更改为以下内容:

set M2_HOME=C:\apache-maven-3.0.4\apache-maven

此外,JDK的安装看起来更像是JRE,而不是JDK。对于Maven,您需要JDK而不是JRE。


谢谢,但我同时拥有jdk和jre。您可以看到我已经将JAVA_HOME指定为C:\ Program Files \ Java \ jdk1.7.0_04。而且,如果我提供您告诉的M2_HOME的路径,则cmd甚至不会识别“ mvn”命令。
manofsins 2012年

如我所述,您更改了M2_HOME,它将把%M2_HOME%\ bin添加到调用mvn命令所需的路径中。
khmarbaise12年

4

我在Mac OSX上遇到了类似的问题。经过一系列的尝试和错误尝试,我终于解决了它。

~/.bash_profile看起来像这样

export M2_HOME=/Users/xyz/maven-3.x/bin
export PATH=$PATH:$M2_HOME

当我尝试echo M2_HOME从终端执行操作时,它会向我显示正确的路径,但是当我尝试触发任何诸如mvn clean或的maven命令时mvn install,它总是会出现相同的问题

无法找到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher

我通过将其更改M2_HOME

export M2_HOME=/Users/xyz/maven-3.x
export PATH=$PATH:$M2_HOME/bin

瞧!它开始工作了!只需将/binM2_HOME 的位置移动到PATH


3

只要确保您已下载Binary zip存档(apache-maven-3.5.0-bin.zip),而不是Source zip存档即可。然后将创建的目录apache-maven-3.5.0的bin目录添加到PATH环境变量中。


3

对于大多数Maven设置问题,例如“找不到或加载主类...”,请从以下步骤开始,看看是否可以解决:

  • 确保解压缩了正确的档案(BINARY档案而不是SOURCE档案)
  • 删除所有与Maven相关的用户和系统变量(例如M2_HOME,M2_OPTS等)
  • 确保已设置JAVA_HOME系统变量(例如“ C:\ Program Files \ Java \ jdk1.8.0_172”)
  • 确保将Java bin位置添加到“路径”系统变量中(例如,“%JAVA_HOME%\ bin”)
  • 确保将Maven Bin位置添加到“路径”系统变量中(例如“ C:\ MyInstalls \ apache-maven-3.5.4 \ bin”)

然后...

  • 验证Java是否已设置(在命令提示符下:java -version)
  • 验证是否已安装Maven(在命令提示符下:mvn --version)

2

我遇到过同样的问题。我有Windows XP框,当我mvn -version在命令行提示符下键入时,出现了可怕的错误消息

"Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher"

我确认将M2_HOME变量设置为在PC上安装Maven的路径,并echo %path%确认Maven在我的路径中。

当我偶然发现自己的解决方案时,我一直在寻找一个解决方案(我说我的解决方案是因为我知道这可能不会成为遇到相同错误的每个人的解决方案)。

我复制了分配给M2_HOME变量的路径。我打开一个cmd窗口,键入cd,然后粘贴从M2_HOME变量获取的路径。那时我知道该路径是正确的,因为该路径显示在窗口中。在这一点上,我输入了dir命令,令我惊讶的是,出现了错误“找不到文件”。

我通过资源管理器转到该路径,并确定存在足够的文件。我注意到文件夹已淡出,但是我可以访问它们并查看每个文件夹中的文件(我在PC上具有管理员权限)。我查看了Maven父文件夹的属性,并看到已选中“隐藏”框。我删除了检查并应用并成功尝试了dir命令。

接下来,我mvn –version再次尝试了该命令,但是这次我得到了预期的结果。

C:\>mvn -version
Apache Maven 3.0.3 (r1075438; 2011-02-28 11:31:09-0600)
Maven home: C:\Program Files\apache-maven-3.0.3
Java version: 1.5.0_16, vendor: Sun Microsystems Inc.
Java home: C:\Java\jdk1.5.0_16\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows xp", version: "5.1", arch: "x86", family: "windows"

最终,我创建了一个jar和war文件,并且我的Web应用程序在本地Tomcat上成功运行。

希望对您有所帮助。



1

除了@khmarbaise指出的内容外,我认为您输入了JAVA_HOME错误。如果已安装在默认位置,则jdk和1.7.0_04之间不应存在“-”(连字符)。原来如此

JAVA_HOME C:\Program Files\Java\jdk1.7.0_04 

谢谢,但是不幸的是,我只在这里打错了它,和您说的一样,“没有连字符”。
manofsins 2012年

1

对于可能遇到此问题的其他人,请不要忘记检查〜/ .mavenrc的M2_HOME或JAVA_HOME设置。


1

尝试下载二进制zip文件(例如,Maven 3.0.5(二进制zip文件)),而不要下载官方Maven网站中的完整源代码。还要确保命令行可以识别java和javac命令。我注意到,Maven Source zip在lib文件夹中未包含任何库,但是Binary zip在启动文件夹中具有plexus-classworlds-2.4.jar。也许问题在于缺少这些库。无论如何,它对我有帮助,所以我的M2_HOME是:C:\ Program Files \ Java \ apache-maven-3.0.5,在PATH中,我放了:C:\ Program Files \ Java \ apache-maven-3.0.5 \ bin。


1

我在centOS中发现此问题是由“ Oracle Java被gcj替换”引起的,将默认Java更改为“ Oracle Java”后,此问题已解决。

alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*  1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
 + 2           /usr/java/jdk1.7.0_67/bin/java

1

好像您已经安装了源文件(因为src仅包含在源文件中,所以我们不需要它)。尝试从 那里安装二进制文件。如上所述,然后设置环境变量 存在。这对我有用。而且我相信它也会为您服务。


1

我认为您下载了错误的版本。我现在遇到了这个问题,搜索后没有方法起作用。最后,我发现我下载的Maven是Source zip archive。在我更改为Binary zip存档后,一切都很好。


我正要发布这个。这正是我面临的问题。如果只有我读过您的答案,它才能为我节省30分钟。
Bartho Bernsmann '17

1

我也面临类似的问题。但就我而言,我在路径变量中使用了apache-maven-3.3.3-src文件夹。后来我用文件夹apache-maven-3.3.3-bin的正确路径纠正了这些错误。这解决了问题。我并没有告诉您这里报告的错误是相同的,但是通过这种方式,您也可以获取此错误并进行纠正。这就是我想在这里说的。


1

打开一个新的终端并执行以下操作

M2_HOME=/Users/macbook/apache-maven-3.6.1 //Set where maven is
M2=$M2_HOME/bin                          //Set home as bin
export PATH=$M2:$PATH                   //Place the new path

然后输入

mvn -version

您可以将其设置为在./bash_profile每次运行终端时自动执行


0

如果仅将bin目录复制到安装目录,即使使用正确的环境变量设置,也可能出现完全相同的错误。它可以which很好地工作,并且新手会陷入困境。


0

在Ubuntu的OpenJDK 11上使用Maven 3.5.4时遇到了这个问题。Ubuntu上的OpenJDK 11实际上仍然是JDK10:

$ ls -al /etc/alternatives/java
lrwxrwxrwx 1 root root 43 Aug 24 04:54 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java
$ java --version
openjdk 10.0.2 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3, mixed mode)

我将Oracle的OpenJDK安装到/opt/jdk-11.0.1中,并按以下方式运行Maven:

JAVA_HOME=/opt/jdk-11.0.1 mvn

现在,它像魅力一样工作。


0

我的surefire插件本身有问题。回到2.6版对我有用。版本2.18 / 20 / 22.1给了我错误。现在,我尝试了surefire插件的3.0.0-M1版本,它可以正常工作。

因此,在2.6和3.0.0版之间的surefire plgin中出了点问题。我认为有些东西不应该硬编码为默认值。


0

对我来说,听起来很有趣,但它有助于重新启动eclipse...


0

这对我有用:

  1. 删除环境变量中的所有Mavin引用
  2. 从mavin 下载Binary
  3. 将其解压缩到您想要的位置:C:\ apache-maven-3.6.0
  4. 转到环境变量,然后将其添加到系统变量路径“ C:\ apache-maven-3.6.0 \ bin”
  5. 以管理员身份启动命令提示符
  6. 检查版本:mvn -v

CMD结果:

Apache Maven 3.6.0(97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T20:41:47 + 02:00)Maven主页:C:\ apache-maven-3.6.0 \ bin。


0

我的系统(Mac)中也遇到以下错误

错误:找不到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher

经过一些随机浏览后,我遇到了链接“ http://maven.apache.org/install.html ”,其中说“ JAVA_HOME”应设置为“ /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/目录/首页/ jre”。

当我如上所述在“ .bash_profile”中更改“ JAVA_HOME”时,“ mvn”命令开始工作,但“ javac -version”命令停止工作。

当我键入“ javac -version”命令时,出现以下错误

无法在“ /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre/bin/javac”中找到可执行文件(-1)

因此,我将“ JAVA_HOME”回滚到“ .bash_profile”中的“ /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home”,并在“ mvn”脚本的顶部添加了以下行

导出JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre

现在,“ mvn”和“ javac”命令都可以正常工作,但是在仔细观察了mvn脚本之后,我无法区分以下命令

/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / bin / java -classpath /Users/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1/boot/plexus-classworlds-2.6.0。 jar -Dclassworlds.conf = /用户/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1/bin/m2.conf -Dmaven.home = / Users / venkatarajeevmandava / Documents / Maven / apache-maven-3.6.1- Dlibrary.jansi.path = /用户/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1/lib/jansi-native -Dmaven.multiModuleProjectDirectory = / Users / venkatarajeevmandava / Documents / Maven / apache-maven-3.6.1 / bin org.codehaus.plexus.classworlds.launcher.Launcher

/ Library / Java / JavaVirtualMachines / jdk1.8.0_45.jdk / Contents / Home / jre / bin / java -classpath /Users/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1/boot/plexus-classworlds-2.6。 0.jar -Dclassworlds.conf = /用户/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1/bin/m2.conf -Dmaven.home = / Users / venkatarajeevmandava / Documents / Maven / apache-maven-3.6。 1 -Dlibrary.jansi.path = /用户/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1/lib/jansi-native -Dmaven.multiModuleProjectDirectory = / Users / venkatarajeevmandava / Documents / Maven / apache-maven-3.6。 1 / bin org.codehaus.plexus.classworlds.launcher.Launcher

在上面的第一个命令中导致了以下错误

错误:找不到或加载主类org.codehaus.plexus.classworlds.launcher.Launcher

而第二个命令运行正常。请注意,以上两个路径均具有“ java”命令,其中一个路径来自“ jre”,另一个路径来自“ jdk”

其他全局变量如下“ .bash_profile”中的

导出M2_HOME = /用户/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1

导出PATH = $ PATH:$ M2_HOME / bin


-1

这是设置Maven时的常见问题。您需要做的是以下内容:-

  1. M2_HOME:-D:\ apache-maven-2.0.11
  2. M2:-D:\ apache-maven-2.0.11 \ bin
  3. 路径:-附加;;%M2%

M2_HOME和M2:-需要声明为系统变量,而不是USER / ADMIN变量。

路径:-这可以是系统变量或USER / ADMIN变量[PATH]。最好是系统变量。

一旦仔细地设置了这三个变量,就可以如下所示验证Maven的安装。

关于CMD提示:-


C:\ Documents and Settings \ ADMIN> mvn --version


输出:-


Apache Maven 2.0.11(r909250; 2010-02-12 11:25:50 + 0530)Java版本:1.6.0_22 Java主页:C:\ Program Files \ Java \ jdk1.6.0_22 \ jre默认语言环境:zh_CN,平台编码:Cp1252操作系统名称:“ windows xp”版本:“ 5.1”拱门:“ x86”家族:“ windows”

谢谢。


-1

在可能有用但又可能过于症状的答案旁边,下面是试图帮助找到问题原因的答案。

Maven是一个命令行Java工具。这意味着,它不是独立的二进制文件,而是java .jar的集合,由jvm解释(java.exe在Windows,javaLinux上)。

mvn命令是一个脚本。在Windows上,它是一个称为的脚本mvn.cmd,在Linux上,它是一个Shell脚本。因此,如果您写:mvn install,将会发生什么:

  1. 实际的调用脚本将调用命令解释器(/bin/shcmd.exe
  2. 该脚本设置所需的环境变量
  3. 最后,它将使用所需的包含Maven功能的类路径调用Java解释器。

问题出在(2)。幸运的是,该脚本非常简单。对于Java程序员来说,调试20行左右的脚本并不是什么大麻烦,即使它是一点外来语言也是如此。

在linux上,您可以调试将脚本-x标记提供给shell解释器的shellscript (很可能是bash)。在Windows上,您必须找到其他方法来调试cmd.exe脚本。因此,而不是mvn install发出命令bash -x mvn install

结果如下:

+ '[' -z '' ']'
+ '[' -f /etc/mavenrc ']'
+ '[' -f /home/picsa/.mavenrc ']'
+ cygwin=true
+ darwin=false

...没有那么多东西...

+ MAVEN_PROJECTBASEDIR='C:\peter\bin'
+ export MAVEN_PROJECTBASEDIR
+ MAVEN_CMD_LINE_ARGS=' '
+ export MAVEN_CMD_LINE_ARGS
+ exec '/cygdrive/c/Program Files/Java/jdk1.8.0_66/bin/java' -classpath 'C:\peter/boot/plexus-classworlds-*.jar' '-Dclassworlds.conf=C:\peter/bin/m2.conf' '-Dmaven.home=C:\peter' '-Dmaven.multiModuleProjectDirectory=C:\peter\bin' org.codehaus.plexus.classworlds.launcher.Launcher
Fehler: Hauptklasse org.codehaus.plexus.classworlds.launcher.Launcher konnte nicht gefunden oder geladen werden

最后,您可以轻松测试哪个环境变量变坏,并且可以非常轻松地修复脚本(或将脚本设置为所需的脚本)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.