ChatGPT解决这个技术问题 Extra ChatGPT

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

我在 Windows 7 上安装了最新的 maven-3.0.4
安装详情如下:
安装路径:

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 环境变量的解决方案无效。

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

甲骨文博客,

堆栈溢出问题,

另一个堆栈问题,

一些博客,

但仍然无法得到它。我可能在这整件事中缺少什么?提前致谢。

刚刚下载了 binary zip,它被破坏了。替换为 .tar.gz 并且可以正常工作。因此,当 M2_HOME 设置正确时,请真正尝试检查您下载的内容是否正确。
@PavelHoral 同样发生在我身上
我只在这个詹金斯上得到这个错误,通过像 mvn compile 这样的命令工作正常!

C
CodeRain

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

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


我在mac上也一样。确保删除 M2_HOME
在 Ubuntu 上使用 Maven 3.3.3 二进制文件。未设置 JAVA_HOME。
这适用于安装了 brew 的 Mac OS 10.10.5(3.3.3)。
@卢克谢谢! unset M2_HOME
此解决方案有效,但并非出于您可能认为的原因。如引用文章的 commentssome 所示,问题不是需要 M3_HOME,而是 M2_HOME 定义不正确。似乎根本没有使用 M3_HOME,所以基本上发生的事情是删除 M2_HOME 时使用默认值。
A
Andrew Barber

即使问题已得到解答,我想补充一点,如果您遇到上述错误,请确保您已下载二进制文件。

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

我有相当一部分人下载了错误的文件,老年人和青少年


实际上,我是故意下载源代码的,因为这是传统的做事方式,但我不小心按照二进制安装的说明进行操作。从长远来看,只是复制二进制 tar 实际上更容易。
+1:同样的事情发生在这里 - 不小心点击了错误的下载链接。不是因为我得到了正确的 zip 文件!
这单枪匹马地为我解决了这个问题 - 谢谢!
真的。下载源文件并尝试更新 M3_HOME 但没有奏效。二进制文件很好用。
刚发生在我身上。该网站尚不清楚使用哪个网站。
A
Alex Fairchild

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

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 应该保持不变。
M2 环境变量如何使用?我只有 JAVA_HOMEM2_HOME
@KevinMeredith:M2 环境变量有时用于指示 %M2_HOME\bin% 路径,然后将其添加到 %Path% 环境变量中。当在定义的标准 %Path% 条目中找不到 Maven 批处理文件 mvn.bat 时,需要这样做。一个典型的用例是 Maven 的非标准安装目录。
@Alex我只在这个詹金斯上得到这个错误,通过像 mvn compile 这样的命令工作正常!
J
Joseph Lust

尽管安装是由 apt-get 完成的,但在两个不同的 Ubuntu 12.04 安装中出现了这个问题。问题是 M2_HOME。

固定:

export M2_HOME=/usr/share/maven

它对我有用,但使用 M2_HOME=/usr/share/maven2 (以防其他人尝试)。谢谢!
在 Ubuntu 上,最好使用您指向的命令创建 /etc/profile.d/maven.sh:export M2_HOME=/usr/share/maven。正如@jimkont 指出的那样,有时是maven2 或maven3(当然,如果您安装了maven3)。
有用。谢谢。但是我们可以将它添加到 /etc/envirtment 文件中吗?
s
saravp

我相信这个错误是由于从 Maven 站点下载 SRC 而不是 BINARY 引起的。请确保下载二进制 zip。

因为下面的路径,只有在下载 SRC 时才会得到:

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

https://i.stack.imgur.com/AJaKj.jpg


这对我有用。按照此处的指南:maven.apache.org/install.html 并使用 C:\apache-maven-3.6.3\bin 设置系统 PATH 变量
非常好的提示,因为在 SRC zip 文件的嵌套 apache-maven 文件夹内还有一个 bin 文件夹!
j
jdmidtun

听起来您根据路径信息安装(提取)源文件而不是二进制文件。尝试安装二进制文件并遵循其他海报的答案。


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

好吧,我遇到了这个问题,在看到这篇文章,尤其是 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 这样的命令工作正常!
J
JESii

更高版本的 Maven 的解决方案是直截了当的。我在 OS X ElCap、10.11.6 上并升级到 Maven 3.3.9。我遇到了与错误“Could not find ...org.codehaus.plexus...”相同的问题。提供的链接 here 在 McKamey 的评论中提供了解决方案 - 只需删除 M2_HOME (unset M2_HOME)。一旦我尝试过,一切都按预期工作。

这可以通过访问 Maven install page 来确认:“将创建的目录 apache-maven-3.3.9 的 bin 目录添加到 PATH 环境变量中”——根本没有提到 M2_HOME 或 M3_HOME。


S
Sreekanth

对于大多数 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)


G
Gastón Saillén

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

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 中设置它以在每次运行终端时自动执行


k
khmarbaise

您应该将 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' 命令。
您按照我的描述更改 M2_HOME,它将 %M2_HOME%\bin 添加到调用 mvn 命令所需的路径中。
S
Saif Asif

我在我的 mac OSX 上遇到了类似的问题。经过一系列的反复试验,我终于解决了它。

我的 ~/.bash_profile 看起来像这样

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

当我尝试从终端执行 echo M2_HOME 时,它显示了正确的路径,但是当我尝试触发任何 maven 命令(如 mvn cleanmvn install)时,它总是给出同样的问题

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

我通过将 M2_HOME 更改为此解决了这个问题

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

瞧!它开始工作了!只需将 /bin 的位置从 M2_HOME 移动到 PATH 前面


S
Shaini Sinha

只需确保您已下载二进制 zip 存档 (apache-maven-3.5.0-bin.zip) 而不是源 zip 存档。然后将创建的目录apache-maven-3.5.0的bin目录添加到PATH环境变量中。


B
Bharath Kumar

安装二进制版本的 Maven 修复了问题

apache-maven-3.6.1-bin.zip


A
Ankur

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

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

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

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

我复制了分配给我的 M2_HOME 变量的路径。我打开一个 cmd 窗口并输入 cd 并粘贴从 M2_HOME 变量中获得的路径。那时我知道路径是正确的,因为路径显示在窗口中。此时我输入了 dir 命令,令我惊讶的是,我得到了错误 File Not Found。

我通过资源管理器去了那条路径,果然有文件存在。我注意到这些文件夹已淡出,但我可以访问它们并查看每个文件夹中的文件(我在我的电脑上有管理员权限)。我查看了 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 上成功运行。

我希望这对你们中的一些人有所帮助。


R
Raghuram

除了@khmarbaise 指出的内容外,我认为您输入了错误的 JAVA_HOME。如果您已经安装在默认位置,那么 jdk 和 1.7.0_04 之间应该没有“-”(连字符)。所以它会是

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

谢谢,但不幸的是,我只是在这里打错了,和你说的一样,“没有连字符”。
J
JBCP

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


S
Shendor

尝试下载二进制 zip(例如 Maven 3.0.5 (Binary 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。


w
wu liang

我发现我的centOS中的这个问题是由“Oracle Java is replace by 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

H
Hammad Hassan

看起来您已经安装了源文件(因为 src 只出现在源文件中,我们不需要它)。尝试从 there 安装 Binary Files。然后如there所述设置环境变量。这对我有用。我相信它也对你有用。


M
Mithril

我认为你下载了错误的版本。我刚刚遇到这个问题,搜索和搜索后没有任何方法工作。最后发现我下载的maven是Source zip archive。在我更改为 Binary zip archive 后,一切都会好起来的。


我正要发这个。这正是我面临的问题。如果我在阅读您的答案之前就可以节省 30 分钟。
v
vinoth kumar

我也面临类似的问题。但就我而言,我在路径变量中使用了 apache-maven-3.3.3-src 文件夹。后来我更正了文件夹 apache-maven-3.3.3-bin 的正确路径。这解决了这个问题。我不是说这里报告的错误相同,但这样你也可以得到这个错误并纠正它。这就是我在这里想说的。


d
dytori

如果仅将 bin 目录复制到安装目录,即使环境变量设置正确,也可能出现完全相同的错误。它使which工作正常,新手卡住了。


p
peterh

在可能有用但可能过于症状的答案旁边,这里有一个试图帮助找出问题原因的答案。

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

mvn 命令是一个脚本。在 Windows 上,它是一个名为 mvn.cmd 的脚本,而在 linux 上,它是一个 shell 脚本。因此,如果你写:mvn install,会发生什么:

为实际调用脚本调用命令解释器(/bin/sh 或 cmd.exe),该脚本设置所需的环境变量,最后,它调用具有所需类路径的 java 解释器,其中包含 maven 功能。

问题在于(2)。幸运的是,这个脚本很简单,非常简单。对于 java 程序员来说,调试大约 20 行的脚本应该不是什么大麻烦,即使它有点陌生。

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

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


我很欣赏这个答案。对我来说,它在没有自定义的情况下跨系统重用了一些“点文件”,这弄乱了“CLASSWORLDS_JAR=build-classpath plexus-classworlds”调用。关键是你搞砸了很多事情,是的,你只需要硬着头皮运行 set -x 并进行调试。
C
Christian Hujer

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

它现在就像一个魅力。


C
Coolius

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

所以版本 2.6 和 3.0.0 之间的surefire plgin 有问题。我假设有一些硬编码的默认值不应该。


m
membersound

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


A
Aberaitius

这对我有用:

删除环境变量中的所有 Mavin 引用 从 mavin 下载二进制文件 将其解压缩到您想要的位置 例如:C:\apache-maven-3.6.0 转到环境变量并添加到系统变量路径“C:\apache-maven- 3.6.0\bin" 以管理员身份启动命令提示符检查版本:mvn -v

命令结果:

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


V
Venkata Rajeev Mandava

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

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

在进行了一些随机浏览后,我发现了链接“http://maven.apache.org/install.html”,上面写着“JAVA_HOME”应该设置为“/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre”。

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

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

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

因此,我在“.bash_profile”中将“JAVA_HOME”回滚到“/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=/Users/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=/Users/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=/Users/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=/Users/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=/Users/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1

导出 PATH=$PATH:$M2_HOME/bin


K
Kshitij Kohli

能够通过删除我机器中下载的 maven ( /Users/kkohli/Desktop/Personal/Code/Java/apache-maven-3.6.3 ) 并从 apache 站点重新下载二进制版本来解决此问题。没有修改任何其他 bashprofile 文件等(我的 M2_HOME、JAVA_HOME 等设置在我的 bashprofile 中)


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅