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

Posted

技术标签:

【中文标题】Maven 错误:无法找到或加载主类 org.codehaus.plexus.classworlds.launcher.Launcher【英文标题】:Maven error: Could not find or load main class org.codehaus.plexus.classworlds.launcher.Launcher 【发布时间】:2012-06-22 12:16:57 【问题描述】:

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

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

oracle blog, *** question, another stack question, some blog,

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

【问题讨论】:

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

我的系统(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/文档/Maven/apache-maven-3.6.1/bin org.codehaus.plexus.classworlds.launcher.Launcher

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

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

虽然第二个命令运行良好。 请注意,上述两个路径都有“java”命令,一个来自“jre”,另一个来自“jdk”

其他全局变量如下".bash_profile"

export M2_HOME=/Users/venkatarajeevmandava/Documents/Maven/apache-maven-3.6.1

导出 PATH=$PATH:$M2_HOME/bin

【讨论】:

【参考方案2】:

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

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 中设置此项,以便每次运行终端时自动执行此操作

【讨论】:

【参考方案3】:

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

apache-maven-3.6.1-bin.zip

【讨论】:

【参考方案4】:

这对我有用:

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

CMD 结果:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

所以 2.6 和 3.0.0 之间的surefire plgin 有问题。我认为默认情况下有一些硬编码的东西不应该。

【讨论】:

【参考方案7】:

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

我将 OpenJDK 从 Oracle 安装到 /opt/jdk-11.0.1 并像这样运行 Maven:

JAVA_HOME=/opt/jdk-11.0.1 mvn

它现在就像一个魅力。

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

我相信这个错误是由于从 Maven 站点下载 SRC 而不是 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 变量【参考方案10】:

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

【讨论】:

【参考方案11】:

针对 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。

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

我也遇到了这个问题,找到了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 未设置。 这适用于 Mac OS 10.10.5,安装了 brew 的 maven (3.3.3)。 @Luke 谢谢! unset M2_HOME. 此解决方案有效,但并非出于您可能认为的原因。如引用文章的comments 中的some 所示,问题不是需要M3_HOME,而是M2_HOME 定义不正确。似乎根本没有使用 M3_HOME,所以基本上发生的事情是删除 M2_HOME 时使用默认值。【参考方案14】:

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

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

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

    为实际调用脚本调用命令解释器(/bin/shcmd.exe) 此脚本设置所需的环境变量 最后,它使用包含 maven 功能的所需类路径调用 java 解释器。

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

在 linux 上,您可以调试 shellscript,将 -x 标志提供给您的 shell 解释器(很可能是 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

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

【讨论】:

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

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

【讨论】:

我正要发布这个。这正是我面临的问题。如果我在阅读您的答案之前能节省 30 分钟。【参考方案16】:

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

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 这样的命令工作正常!【参考方案17】:

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

【讨论】:

【参考方案18】:

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

【讨论】:

【参考方案19】:

尝试在官方 maven 站点下载二进制 zip(例如 Maven 3.0.5 (Binary zip))而不是完整源代码。 还要确保命令行能够识别 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。

【讨论】:

【参考方案20】:

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

【讨论】:

【参考方案21】:

我在我的 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前面

【讨论】:

【参考方案22】:

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

【讨论】:

【参考方案23】:

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

只有在您是高级用户并且知道如何处理它的情况下才应该下载源文件。

我有相当一部分人下载了错误的文件,前辈和后辈

【讨论】:

我实际上故意下载了源代码,因为这是传统的做事方式,但我不小心按照说明进行了二进制安装。从长远来看,只是复制二进制 tar 实际上更容易。 +1:同样的事情发生在这里——不小心点击了错误的下载链接。不是因为我得到了正确的 zip 文件! 这一个人为我解决了这个问题 - 谢谢! 是的。下载源文件并尝试更新 M3_HOME 但没有用。二进制文件运行良好。 刚刚发生在我身上。该网站不清楚使用哪个网站。【参考方案24】:

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

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

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

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

仔细设置这3个变量后,就可以验证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 默认语言环境:en_US,平台编码:Cp1252 操作系统名称:“windows xp” 版本:“5.1” 架构:“x86” 系列:“windows”

谢谢。

【讨论】:

【参考方案25】:

好吧,我遇到了这个问题,在看到这篇文章,尤其是 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 这样的命令工作正常!【参考方案26】:

听起来您是根据路径信息安装(提取)源文件而不是二进制文件。尝试安装二进制文件并按照其他发帖人的回答。

【讨论】:

也感谢我的修复。但是,为什么你不能也使用 src 下载,只要它在 bin 目录中包含正确的可执行文件?【参考方案27】:

我有同样的问题。我有 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 上成功运行。

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

【讨论】:

【参考方案28】:

在两个不同的 Ubuntu 12.04 安装中出现此问题,尽管安装是由 apt-get 完成的。问题是 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/environtment 文件中吗?【参考方案29】:

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

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

【讨论】:

谢谢,但不幸的是,我只是在这里打错了,和你说的一样,“没有连字符”。【参考方案30】:

您应该将 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 命令所需的路径中。

以上是关于Maven 错误:无法找到或加载主类 org.codehaus.plexus.classworlds.launcher.Launcher的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法找到或加载主类 Maven Spring Boot 应用程序 - 可执行 JAR

运行maven-assembly创建的可执行jar:错误:无法找到或加载主类

无法找到或加载主类 org.apache.maven.wrapper.MavenWrapperMain

通过 gradle 构建后无法找到或加载主类

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

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