Maven 安装 OSX 错误 Unsupported major.minor version 51.0。

114

我通过这些步骤(一个教程)安装了Maven:

JAVA_HOME=/Library/Java/Home
export M2_HOME=/Users/steven/zimmermann/maven
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

echo $JAVA_HOME
echo $M2_HOME
echo $M2
echo $PATH

nano .bash_profile

然后我在 .bash_profile 文件中写了类似以下代码的 echo 命令:

JAVA_HOME=/usr/libexec/java_home
M2_HOME=/path/to/your/apache-maven-3.x.x
M2=/path/to/your/apache-maven-3.x.x/bin
PATH=/path/to/maven/bin:/$….bla-bla-bla…

我还在.bashrc文件中写了这个

export M2_HOME=/Users/steven/zimmermann/maven
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

现在当我想要检查版本号(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 -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
javac -version
javac 1.8.0_40

2
简而言之:Java版本过旧,请使用Java-1.7+。 - Ajeet Ganga
6个回答

275
问题出在您没有正确设置 Mac 上的 JAVA_HOME。为了解决这个问题,您应该像这样进行设置:export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home。在我的情况下,我的 JDK 安装是 jdk1.8.0_40,请确保您输入您自己的 JDK 安装目录。然后您就可以使用 Maven 命令了。祝好!

15
我注意到目前的Maven3版本需要Java7,至少当JAVA_HOME被设置正确,但是指向一个Java 1.6 JDK时,我收到了这个错误信息。 - Steve Powell
我需要将 export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/" 添加到我的 .profile 文件中。 - aliteralmind
在我的情况下,目录/Library/Java/JavaVirtualMachines是空的...我该怎么办?附注:java -version java version "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716) Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode) - LittleLittleQ
1
根据您的 Mac OS X 版本,应将此内容添加到您的 .profile 或 .bash_profile 文件中。 - Pacu
另外,如果将其添加到.profile或.bash_profile中,请记得关闭终端/启动新终端,以便再次运行此文件的内容。 - jotadepicas

16

请尝试:

$JAVA_HOME/bin/java -version

Maven使用$JAVA_HOME来解析JRE库的类路径。 为了确保使用特定的JDK,请在编译之前明确设置它,例如:

export JAVA_HOME=/usr/java/jdk1.7.0_51

如果您正在使用Maven 3.3.1,但版本小于1.7,那么问题的原因可能是一个新的前提条件:https://issues.apache.org/jira/browse/MNG-5780


嘿,我目前正在为同样的问题苦苦挣扎... 你说的“没有1.7以下版本”是什么意思?我正在使用Java 1.6,这太旧了吗?第二个问题:在“/usr”下我没有一个“java”文件夹,只有在System/Library下有一个?任何帮助将不胜感激。 - Frederik Witte
6
从Maven 3.3开始,最低要求的JDK版本为1.7。如果你想使用JDK 1.6编译,那就只能使用Maven 3.2.5或更低版本了。 - René
1
我已经解决了 :) 我安装了JDK 1.7,但JAVA_HOME引用的是jdk 1.6。 - Frederik Witte

7
一个动态的$HOME/.zshrc解决方案,如果你和我一样,即在工作中使用Linux,在家中使用MBP/A。
if [[ $(uname) == "Darwin" ]]; then export OSX=1; fi
if [[ $(uname) ==  "Linux" ]]; then export LINUX=1; fi

if [[ -n $OSX ]]; then
        export JAVA_HOME=$(/usr/libexec/java_home)
else
        export JAVA_HOME=/usr/lib/jvm/default-java
fi

这里的问题不是java_home是否已设置,而是它已经设置了,但版本过旧。 - Ajeet Ganga
在OSX上获取最新的JDK - http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html - lfender6445

3

我解决了这个问题,使用 brew 安装旧版本的 Maven (2.x):

brew uninstall maven
brew tap homebrew/versions 
brew install maven2

2
在Eclipse中,您不需要更改JAVA_HOME,只需要更改Maven的运行配置为1.6以上(即使您的项目是在Java 6上,Maven也不应该是6)。右键单击项目,选择Maven Build或Run As> Run Configurations,并设置正确的JDK版本。

0

在你的.profile文件中添加以下内容 -

export JAVA_HOME=`/usr/libexec/java_home`

(反引号确保执行命令并将其值放入JAVA_HOME)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接