我在终端中输入mvn -v
,它给了我
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:254)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Launcher.java:144)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:266)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
我使用的java版本是当前的Java 8,
我的 $JAVA_HOME
变量设置为 /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home
。
java -v
给了我
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
所以这应该都是正确的,对吧?知道我在这里可能会错过什么吗?
编辑:事实证明,我的 .bash_profile
中缺少 export JAVA_HOME
行。由于下面的正确答案已修复。
最佳答案
首先,异常是因为正在加载的库对于运行的 Java 版本来说太新了。版本 51.0 是 Java 7,因此 mvn
必须使用 Java 6 或更早版本运行。无论您认为 JAVA_HOME
是什么,这都是没有争议的。
命令mvn
是一个执行mvn
Java可执行文件的shell脚本。它很短并且很容易理解。
您可以通过插入来确认正在运行的 Java 版本
echo "$JAVA_HOME"
echo "$JAVACMD"
"$JAVACMD" -version
就在以 开头的行之前
exec "$JAVACMD" ....
它可能会转到 /System/Library
中的 Apple 版本的 java,几乎可以肯定您没有完全正确地设置 JAVA_HOME。
编辑
从评论来看,mvn
认为$JAVA_HOME
是
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
这是基于 Java 1.6 的 Apple JDK 的位置。解决此问题的正确方法是确保在正确的 .profile
或 .bash_profile
中正确设置 JAVA_HOME,具体取决于您使用的 shell。
以下是我的 .profile
,其中删除了所有与 mvn 无关的位。
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8/Contents/Home
M2_HOME=/usr/local/maven
M2=$M2_HOME/bin
MAVEN_OPTS="-Xmx512M"
export M2_HOME M2 JAVA_HOME MAVEN_OPTS
PATH=$JAVA_HOME/bin:$HOME/bin:$PATH:$M2
EDITOR=vim
export EDITOR
关于java - mvn -v 给我 "Unsupported major.minor version 51.0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42902472/