我试图更改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
答案 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