我在 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
环境变量的解决方案无效。
我已阅读并尝试了博客中提供的所有解决方案,例如:
甲骨文博客,
堆栈溢出问题,
另一个堆栈问题,
一些博客,
但仍然无法得到它。我可能在这整件事中缺少什么?提前致谢。
zip
,它被破坏了。替换为 .tar.gz
并且可以正常工作。因此,当 M2_HOME
设置正确时,请真正尝试检查您下载的内容是否正确。
我也遇到了这个问题,找到了 this 篇文章。对于 Maven3,将我的环境变量名称从 M2_HOME 更改为 M3_HOME 就可以了。我在运行 OSX 10.9 和 JDK 1.7 的 Mac 上。希望这可以帮助。
注意:如果已设置,请删除 M2_HOME。例如:unset M2_HOME
即使问题已得到解答,我想补充一点,如果您遇到上述错误,请确保您已下载二进制文件。
仅当您是高级用户并且知道如何处理它时,才应下载源文件。
我有相当一部分人下载了错误的文件,老年人和青少年
我遇到了同样的问题,并且能够通过仔细重做环境变量来解决它:
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
环境变量如何使用?我只有 JAVA_HOME
和 M2_HOME
。
M2
环境变量有时用于指示 %M2_HOME\bin%
路径,然后将其添加到 %Path%
环境变量中。当在定义的标准 %Path%
条目中找不到 Maven 批处理文件 mvn.bat
时,需要这样做。一个典型的用例是 Maven 的非标准安装目录。
尽管安装是由 apt-get 完成的,但在两个不同的 Ubuntu 12.04 安装中出现了这个问题。问题是 M2_HOME。
固定:
export M2_HOME=/usr/share/maven
export M2_HOME=/usr/share/maven
。正如@jimkont 指出的那样,有时是maven2 或maven3(当然,如果您安装了maven3)。
我相信这个错误是由于从 Maven 站点下载 SRC 而不是 BINARY 引起的。请确保下载二进制 zip。
因为下面的路径,只有在下载 SRC 时才会得到:
M2_HOME C:\apache-maven-3.0.4\apache-maven\src
https://i.stack.imgur.com/AJaKj.jpg
听起来您根据路径信息安装(提取)源文件而不是二进制文件。尝试安装二进制文件并遵循其他海报的答案。
好吧,我遇到了这个问题,在看到这篇文章,尤其是 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)
更高版本的 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。
对于大多数 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)
打开一个新终端并执行以下操作
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
中设置它以在每次运行终端时自动执行
您应该将 M2_HOME 的位置更改为以下内容:
set M2_HOME=C:\apache-maven-3.0.4\apache-maven
此外,JDK 的安装看起来更像是 JRE 而不是 JDK。对于 Maven,您需要 JDK 而不是 JRE。
我在我的 mac OSX 上遇到了类似的问题。经过一系列的反复试验,我终于解决了它。
我的 ~/.bash_profile
看起来像这样
export M2_HOME=/Users/xyz/maven-3.x/bin
export PATH=$PATH:$M2_HOME
当我尝试从终端执行 echo M2_HOME
时,它显示了正确的路径,但是当我尝试触发任何 maven 命令(如 mvn clean
或 mvn 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
前面
只需确保您已下载二进制 zip 存档 (apache-maven-3.5.0-bin.zip) 而不是源 zip 存档。然后将创建的目录apache-maven-3.5.0的bin目录添加到PATH环境变量中。
安装二进制版本的 Maven 修复了问题
apache-maven-3.6.1-bin.zip
我遇到过同样的问题。我有 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 上成功运行。
我希望这对你们中的一些人有所帮助。
除了@khmarbaise 指出的内容外,我认为您输入了错误的 JAVA_HOME。如果您已经安装在默认位置,那么 jdk 和 1.7.0_04 之间应该没有“-”(连字符)。所以它会是
JAVA_HOME C:\Program Files\Java\jdk1.7.0_04
对于可能遇到此问题的其他人,不要忘记检查 ~/.mavenrc 的 M2_HOME 或 JAVA_HOME 设置。
尝试下载二进制 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。
我发现我的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
我认为你下载了错误的版本。我刚刚遇到这个问题,搜索和搜索后没有任何方法工作。最后发现我下载的maven是Source zip archive。在我更改为 Binary zip archive 后,一切都会好起来的。
我也面临类似的问题。但就我而言,我在路径变量中使用了 apache-maven-3.3.3-src 文件夹。后来我更正了文件夹 apache-maven-3.3.3-bin 的正确路径。这解决了这个问题。我不是说这里报告的错误相同,但这样你也可以得到这个错误并纠正它。这就是我在这里想说的。
如果仅将 bin
目录复制到安装目录,即使环境变量设置正确,也可能出现完全相同的错误。它使which
工作正常,新手卡住了。
在可能有用但可能过于症状的答案旁边,这里有一个试图帮助找出问题原因的答案。
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
最后,您可以轻松测试哪个环境变量坏了,并且您可以非常轻松地修复您的脚本(或根据需要设置它)。
build-classpath plexus-classworlds
”调用。关键是你搞砸了很多事情,是的,你只需要硬着头皮运行 set -x
并进行调试。
我在 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
它现在就像一个魅力。
我对surefire插件本身有疑问。回到 2.6 版对我有用。版本 2.18/20/22.1 给了我错误。现在我尝试了surefire插件的3.0.0-M1版本,它可以工作。
所以版本 2.6 和 3.0.0 之间的surefire plgin 有问题。我假设有一些硬编码的默认值不应该。
对我来说,这听起来很有趣,它有助于重新启动 eclipse
...
这对我有用:
删除环境变量中的所有 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..
我的系统(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
能够通过删除我机器中下载的 maven ( /Users/kkohli/Desktop/Personal/Code/Java/apache-maven-3.6.3 ) 并从 apache 站点重新下载二进制版本来解决此问题。没有修改任何其他 bashprofile 文件等(我的 M2_HOME、JAVA_HOME 等设置在我的 bashprofile 中)
unset M2_HOME
。