2016-08-12 236 views
0

我试图更改M2_HOME中的bash_profile来配置新版本的Maven。此前,它被设置为2.2.1。现在我正在尝试将路径更改为3.3.3。这是我的bash_profile无法更改Mac上Maven的路径

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船长巨岩

+0

首先删除不需要且不应使用的M2_HOME。只需将Maven发行版的bin文件夹添加到PATH就可以了...也可以在OS X上使用...您发布的错误消息是基于M2_HOME的使用情况,该版本与旧版/其他版本你在PATH中有一个... – khmarbaise

回答

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" 

注设立JAVA_HOME这类似于Java的切换版本的Linux替代品使用/usr/libexec/java_home

所以,在一个新的终端会话如下:

[[email protected] ~]$ java8 
[[email protected] ~]$ m33 
[[email protected] ~]$ 

设置我使用Maven 3.3和Java 8

也请考虑到〜khmarbaise评论关于M2_HOME忘记该环境变量存在。

0

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

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

这是常见的,尤其是在一个产品组合是相当大的环境下工作,必须支持多个Maven版本。与必须支持多个Java版本类似,您可以创建一个脚本来相应地跟踪和修改您的环境。我使用Mac,所以jEnv类型的机制的概念就是我用于Java的概念。在Windows上,可以使用类似的概念,尽管需要一些编码来正确调整路径设置。

这是我用来快速更改我的Maven运行时的/usr/local/bin/mvnEnv bash脚本。它不像jEnv那么全面,但它适用于我,所以它可能适合你。调整各种参数以符合您的各种Maven安装,并适当地更新您的PATH(如果在Windows上)。 (我知道你使用的是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