无法在Mac上更改Maven的路径

时间:2016-08-12 15:22:23

标签: macos maven path

我试图更改M2_HOME中的bash_profile以配置新版本的Maven。早些时候,它设置为 2.2.1 。现在我尝试将路径更改为 3.3.3 。这是我的bash_profile

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
export M2_HOME=/usr/local/apache-maven-3.3.3
#export M2_HOME=/usr/local/apache-maven-2.2.1
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$M2_HOME/bin
export CATALINA_HOME=/Library/Tomcat/apache-tomcat-7.0.68  

当我尝试运行source ~/.bash_profile然后mvn -version时,我收到以下错误 -

$mvn -version
Error: Could not find or load main class org.codehaus.classworlds.Launcher  

有任何建议可以解决这个问题吗?

PS:我是OS X El Captain

3 个答案:

答案 0 :(得分:2)

更简单的替代方法是设置一些bash别名。我已将以下内容添加到~/.bash_profile中,以便在maven版本和Java版本之间切换:

export BASE_PATH=$PATH

#alias java5="export JAVA_HOME=`/usr/libexec/java_home -v1.5 -a x86_64 -d64`"
alias java6="export JAVA_HOME=`/usr/libexec/java_home -v1.6`"
alias java7="export JAVA_HOME=`/usr/libexec/java_home -v1.7`"
alias java8="export JAVA_HOME=`/usr/libexec/java_home -v1.8`"

# maven versions
alias m30="PATH=~/tools/apache-maven-3.0.5/bin:$BASE_PATH"
alias m31="PATH=~/tools/apache-maven-3.1.1/bin:$BASE_PATH"
alias m32="PATH=~/tools/apache-maven-3.2.5/bin:$BASE_PATH"
alias m33="PATH=~/tools/apache-maven-3.3.9/bin:$BASE_PATH"

注意使用/usr/libexec/java_home来设置JAVA_HOME,这类似于用于切换java版本的linux替代方案。

因此,在新的终端会话中,以下内容:

[steve@steves-mbp ~]$ java8
[steve@steves-mbp ~]$ m33
[steve@steves-mbp ~]$ 

让我使用maven 3.3和Java 8。

请同时考虑~khmarbaise关于M2_HOME的评论,并忘记此环境变量存在。

答案 1 :(得分:0)

为我工作的mvn3添加一个新的符号链接

ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/local/User/bin/mvn3

答案 2 :(得分:0)

通常,特别是在产品组合非常大的环境中,必须支持多个Maven版本。与必须支持多个Java版本类似,您可以创建一个脚本来相应地跟踪和修改您的环境。我使用Mac,所以jEnv类型的机制的概念是我用于Java的。在Windows上,可以使用类似的概念,但需要一些编码才能正确调整路径设置。

这是我用来快速更改Maven运行时的/usr/local/bin/mvnEnv bash脚本。它不像jEnv那么全面,但它对我有用,所以也许它可以为你工作。调整各种参数以符合各种Maven安装,并在Windows上正确更新PATH。 (我知道你正在使用Mac,因此Windows评论适用于在Windows上可能存在此问题的其他人。)

如果您需要默认值,只需更新您的~/.bash_profile即可使用相应的参数调用此脚本。然后,当您需要不同版本的Maven时,您可以像

一样执行脚本
mvnEnv v33

瞧,你刚刚改变了你的Maven版本!如果您不知道支持哪些版本的Maven,只需执行mvnEnv命令,即可打印有效版本列表。但是,您必须在脚本中添加任何新版本的Maven才能使新版本可用。

    #!/bin/bash
    echo "Setting the maven implementation version"

    v22=/usr/local/Cellar/maven2/2.2.1/libexec/bin/mvn
    v30=/usr/local/Cellar/maven30/3.0.5/libexec/bin/mvn
    v31=/usr/local/Cellar/maven31/3.1.1/libexec/bin/mvn
    v32=/usr/local/Cellar/maven32/3.2.5/libexec/bin/mvn
    v33=/usr/local/Cellar/maven/3.3.9/libexec/bin/mvn

    if [ -e /usr/local/bin/mvn ] 
    then
        echo "Remove the maven soft link."
        sudo rm /usr/local/bin/mvn
    else
        echo "Maven soft link could not be found."
    fi

    maven=$v22

    if [ $# == 0 ] || [ -z "${!1// }" ] 
    then
        echo "No Arguments supplied, using default $maven"
        echo "Available versions:"
        echo "   v22 = 2.2.1"
        echo "   v30 = 3.0.5"
        echo "   v31 = 3.1.1"
        echo "   v32 = 3.2.5"
        echo "   v33 = 3.3.9"
    elif [ -e ${!1} ]
    then
        echo "Setting maven to use ${!1} via $1"
        maven=${!1}
    else
        echo "Using the default maven setting, provided argument [$1] is not recognized."
    fi

    echo "Creating new soft link to $maven";
    sudo ln -s $maven /usr/local/bin/mvn