java - mvn -v 给我 "Unsupported major.minor version 51.0"

标签 java macos maven terminal

我在终端中输入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/Current‌​JDK/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/

相关文章:

java - 如何将 java 连接到 Ms Access 2010?

Java Applet - "Block potentially unsafe components from being run?"消息

c - 实现拦截文件系统使用的 kext

macos - 有没有办法在 MAC 上从 OpenSSH_5.6p1 更新到 OpenSSH 5.9?

java - Maven测试挂起

Java 8、Base64.Decoder编译

java - 我在面板上有一个用于按钮的 actionListener,获取空指针

macos - 在 OSX 中安装 GNU 汇编器

java - 如何在本地使用外部库?

java - 如何在运行时找出一个类的来源?