【问题标题】:mvn -v gives me "Unsupported major.minor version 51.0"mvn -v 给我“不支持的major.minor 51.0版”
【发布时间】:2017-08-11 15:56:55
【问题描述】:

我在终端输入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。您的系统上正在以某种方式获取 Java 8 以外的 Java 版本。
  • 51 表示它是为 1.7 构建的,因此如先前的答案所示,您的 Java 版本不匹配。
  • 您是否在某处设置了 M2_HOME?如果是这样删除它...
  • @carlspring 不,它不会,如果它首先与UnsupportedClassVersionError 崩溃,则不会。提问者实际上确实运行了mvn -v,这是mvn --version 的同义词。

标签: java macos maven terminal


【解决方案1】:

首先,异常是因为正在加载的库对于运行的 Java 版本来说太新了。版本 51.0 是 Java 7,因此 mvn 必须运行 Java 6 或更早版本。无论您认为JAVA_HOME 是什么,这都没有争议。

命令mvn 是一个shell 脚本,它执行mvn Java 可执行文件。它非常简短且易于理解。

可以通过插入确认运行的Java版本

echo "$JAVA_HOME"
echo "$JAVACMD"
"$JAVACMD" -version

就在以

开头的行之前
exec "$JAVACMD" ....

这可能是/System/Library 中的Apple 版本的java,您几乎可以肯定没有完全正确设置JAVA_HOME。

编辑

从cmets看来mvn认为$JAVA_HOME

/System/Library/Frameworks/JavaVM.framework/Versions/Current‌​JDK/Home 

这是基于 Java 1.6 的 Apple JDK 的位置。解决此问题的正确方法是确保 JAVA_HOME 在右侧 .profile.bash_profile 中设置正确,具体取决于您使用的 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 6。我将如何解决这个问题?我几乎不是这些问题的专家。
  • @BlueTooth4269 打印出来的 JAVA_HOME 的值是多少?
  • /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468-11M4833) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)
  • 所以 JAVA_HOME 设置为 Apple JDK。在运行 mvn 之前正确设置。
  • 非常感谢,解决了 - 我的 .bash_profile 中缺少导出行。添加它,它的工作原理 - 太棒了。
【解决方案2】:

您能否检查一下 apache maven 安装中的/apache-maven/bin/mvn(linux/unix 情况下)或/apache-maven/bin/mvn.cmd(windows 情况下)文件是否将 JAVA_HOME 设置为一些旧版本的 Java。

它可能使用旧的 java 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2016-01-10
    • 2015-05-29
    相关资源
    最近更新 更多