2016-08-12 4 views
0

Я пытался изменить M2_HOME в bash_profile, чтобы настроить новую версию Maven. Ранее было установлено значение 2.2.1. Теперь я пытаюсь изменить путь к . 3.3.3. Это мой bash_profileНевозможно изменить путь для Maven на Mac

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

Сначала удалите 'M2_HOME', который не нужен и не должен использоваться. Просто добавьте папку bin вашего дистрибутива Maven в 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" 

Обратите внимание на использовании /usr/libexec/java_home для установки JAVA_HOME, который похож на Линукс альтернативы для переключения версий Java.

Таким образом, в новой терминальной сессии следующее:

[[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 можно использовать аналогичную концепцию, хотя для правильной настройки параметров пути потребуется некоторое кодирование.

Вот сценарий bash, который я использую для быстрого изменения времени выполнения Maven. Это не так полно, как 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 
Смежные вопросы