无法在 Mac Lion 上升级 Maven - 环境变量

Posted

技术标签:

【中文标题】无法在 Mac Lion 上升级 Maven - 环境变量【英文标题】:Can't upgrade Maven on Mac Lion - Environment Variables 【发布时间】:2015-10-08 17:54:53 【问题描述】:

我的生命体征:OS 10.7.5 Lion,Java 版本“1.7.0_79”,Maven 版本 3.0.3。

我对这里的环境变量很陌生,并且在使用 Maven 时遇到了很多麻烦。我从 Homebrew 获得了当前版本,但我需要更新的版本。我按照此页面 (Maven Install on Mac OS X) 中的 snooze92 说明尝试安装最新版本的 Maven,3.3.3。我当前的版本 3.0.3 存储在 /usr/share/java/maven-3.0.3 中,并且在 /usr/share/maven 也有指向该目录的快捷方式。

echo $JAVA_HOME 返回/System/Library/Frameworks/JAVAVM.framework/Versions/CurrentJDK/Home

但运行 mvn --version 会返回一堆详细信息,包括: Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre(与 JAVA_HOME 指向的路径不同的文件夹。)

通常,echo $M2_HOME 不返回任何内容。在这种情况下,Maven 3.0.3 工作得很好。如果我按照 snooze92 的建议创建 $M2_HOME 环境变量,并使用以下命令将其添加到我的路径中:

export M2_HOME=/usr/local/apache-maven/apache-maven-3.3.3
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

Maven 停止工作;输入 mvn --version 会返回以下内容:

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)

退出终端(或从我的 .bash_profile 文件中删除上述行并重新打开)使 Maven 再次正常工作,尽管它总是恢复到版本 3.0.3。

我还尝试将此页面 (http://www.mkyong.com/maven/install-maven-on-mac-osx/) 上的命令添加到我的 .bash_profile 文件中:

export M2_HOME=/usr/local/apache-maven/apache-maven-3.3.3
export PATH=$PATH:$M2_HOME/bin

这会导致 Maven 返回错误消息:

-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.

【问题讨论】:

【参考方案1】:

您可以编辑 .bash_profile 以导出 JDK 7 Mac OS 安装的动态路径。这可以通过添加为第一行来简单地实现:

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

因此,应保证在运行时不使用 1.6 风格的 JDK(例如,由 Apple 提供的),而是在您的系统环境中使用可工作的 JDK 7。尝试验证

的输出

java -version

在您编辑 .bash_profile 文件后的新终端实例中。它应该给你 1.7.x Java。在此步骤之后,您的新 Maven 版本应该可以工作并且可以通过

进行验证

mvn -version

解释:

如果你改用/System/Library/Frameworks/JAVAVM.framework/Versions/CurrentJDK/Home,你的JAVA_HOME会得到类似的东西:

java 版本 "1.6.0_65" Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716) Java HotSpot(TM) 64 位服务器 VM(内部版本 20.65-b04-466.1,混合模式)

这不是 Maven 3.3.x 想要/需要的

【讨论】:

以上是关于无法在 Mac Lion 上升级 Maven - 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

在 mac 上升级 bash

无法从 Mac lion 连接到远程 mysql

phpize 无法在 Mac OS X Lion 上运行

如何在mac上升级pandas

无法在 Mac OS Lion 上运行配置良好的 php 脚本

缺少在 Mac OSX Lion/make 上安装 Qt