简体   繁体   English

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

[英]Can't upgrade Maven on Mac Lion - Environment Variables

My vitals: OS 10.7.5 Lion, Java version "1.7.0_79", Maven version 3.0.3. 我的命脉:OS 10.7.5 Lion,Java版本“ 1.7.0_79”,Maven版本3.0.3。

I'm quite new to Environment Variables here, and having a lot of trouble with Maven. 我在这里对环境变量很陌生,并且在使用Maven时遇到很多麻烦。 I got my current version from Homebrew, but I need a more recent one. 我从Homebrew获得了当前版本,但是我需要更新版本。 I followed snooze92's instructions from this page ( Maven Install on Mac OS X ) to try to install the latest version of Maven, 3.3.3. 我按照此页面上的snooze92指示( 在Mac OS X上进行Maven安装 )尝试安装最新版本的Maven 3.3.3。 My current version, 3.0.3, is stored in /usr/share/java/maven-3.0.3 , and there's also a shortcut to that directory at /usr/share/maven . 我当前的版本3.0.3存储在/usr/share/java/maven-3.0.3 ,并且在/usr/share/maven也有一个指向该目录的快捷方式。

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

But running mvn --version returns a bunch of details including: Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre (which is a different folder to the path JAVA_HOME points to.) 但是运行mvn --version返回许多详细信息,包括: Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre (与JAVA_HOME指向的路径不同的文件夹。)

Normally, echo $M2_HOME returns nothing. 通常, echo $M2_HOME返回任何内容。 In this case, Maven 3.0.3 works just fine. 在这种情况下,Maven 3.0.3可以正常工作。 If I create the $M2_HOME environment variable, as snooze92 suggests, and add it to my path using the following commands: 如果我按照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 stops working; Maven停止工作; typing in mvn --version returns the following: 输入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)

Quitting Terminal (or deleting the above lines from my .bash_profile file and re-opening) makes Maven work fine again, although it always reverts to version 3.0.3. 退出终端(或从我的.bash_profile文件中删除上述行并重新打开)使Maven再次正常运行,尽管它始终会恢复到3.0.3版。

I also tried adding the commands on this page ( http://www.mkyong.com/maven/install-maven-on-mac-osx/ ) to my .bash_profile file: 我还尝试将此页面上的命令( 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

This causes Maven to return the error message: 这将导致Maven返回错误消息:

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

You could edit your .bash_profile to export the dynamic path of your JDK 7 Mac OS installation. 您可以编辑.bash_profile来导出JDK 7 Mac OS安装的动态路径。 This can simply be achieved by adding as first line: 只需添加第一行即可实现:

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

Thereby, it should be guaranteed that no 1.6 style JDK (eg, as delivered by Apple) is used at runtime, but a working JDK 7 of your system environment. 因此,应该保证在运行时不使用1.6样式的JDK(例如,由Apple交付),而是在系统环境中运行的JDK 7。 Try to validate the output of 尝试验证的输出

java -version

in a new terminal instance after you edited the .bash_profile file. 在编辑.bash_profile文件之后,在新的终端实例中运行。 It should give you 1.7.x Java. 它应该给你1.7.x Java。 After this step your newer Maven version should work and can be validated via 完成此步骤后,您的新Maven版本应该可以使用了,并且可以通过以下方式进行验证

mvn -version

Explanation: 说明:

If you use /System/Library/Frameworks/JAVAVM.framework/Versions/CurrentJDK/Home instead you will get something like this for your JAVA_HOME : 如果您使用/System/Library/Frameworks/JAVAVM.framework/Versions/CurrentJDK/Home ,则您的JAVA_HOME将会得到类似的内容:

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) java版本“ 1.6.0_65” Java SE运行时环境(内部版本1.6.0_65-b14-466.1-11M4716)Java HotSpot™64位服务器VM(内部版本20.65-b04-466.1,混合模式)

which is not what you want/need for Maven 3.3.x 这不是您想要/不需要的Maven 3.3.x

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM