2015-01-21 2 views
5

====== EDIT 2:МВН: Мы не можем выполнить/USR/libexec/java_home/bin/Java

Я использовал тот же код, указанный ниже в редактировании 1, моя ошибка, по-видимому был не в самом коде, а из-за источника ~/.bash_profile, не обновляющего мой файл, как ожидалось. Я думаю, однако (спасибо @eckes), пожалуйста, см. Ошибку maven :(BTW: jira.codehaus.org/browse/MNG-5686 - eckes 39 secs назад)

EDIT 1: это не дубликат: What should I set JAVA_HOME to on OSX

Я пробовал все решения, упомянутые в вышеприведенном сообщении, и они не работают для меня. Моя проблема в том, что я делаю одно из решений, перечисленных здесь (я пробовал другие). Я все еще получаю ошибку.

В настоящее время я пытаюсь согласно инструкциям выше:

export JAVA_HOME=$(/usr/libexec/java_home) 

и получать:

source ~/.bash_profile 
    mvn -version 
Error: JAVA_HOME is not defined correctly. 
    We cannot execute /usr/libexec/java_home/bin/java 

======= Я установил последнюю версию Java JDK от оракула

java -version 
java version "1.8.0_31" 
Java(TM) SE Runtime Environment (build 1.8.0_31-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode) 

Я установил Xcode для установки maven, однако в недавней документации указано, что я могу использовать квас (Maven Install on Mac OS X)

Я установил Maven с:

//install brew 
brew doctor 
brew install maven 

Затем я попробовал:

mvn -version 
    Error: JAVA_HOME is not defined correctly. 

я нашел: http://hathaway.cc/post/69201163472/how-to-edit-your-path-environment-variables-on-mac

Однако это основано на Java 7 Я считаю. Но, похоже, это было исправление.

Там нет bash_profile на новом макинтоше (https://apple.stackexchange.com/questions/26928/no-bash-profile-in-os-x-lion)

Так что я создал и редактировал мой bash_profile с:

touch ~/.bash_profile 
vim ~/.bash_profile 
//and added the line export JAVA_HOME=(/usr/libexec/java_home) 

Моя проблема заключается в том, что даже с этим исправлением я все еще получаю следующее сообщение об ошибке :

mvn -version 
     Error: JAVA_HOME is not defined correctly. 
     We cannot execute /usr/libexec/java_home/bin/java 

Я проверил, однако, что в моей файловой системе java_home находится там, где находится файл. В моей файловой системе нет «/ usr/libexec/java_home/bin/java» как ошибка maven.

Неужели кто-то еще столкнулся с этим с новой java 8 и заварил установленный maven? Я использую MacBook Pro (Retina, 13 дюймов, середина 2014 года), работающий на Yosemite. Я уже установил такую ​​установку, но никогда не сталкивался с этой проблемой.

** Примечание:

Я нашел это: http://www.mkyong.com/java/maven-java_home-is-not-defined-correctly-on-mac-osx/

который я думал, что, несомненно, будет мое исправление. Исправьте меня, если я ошибаюсь, но я считаю, что разница - это скобки.

Ex:

export JAVA_HOME=/usr/libexec/java_home 

против

export JAVA_HOME=(/usr/libexec/java_home) 

Однако не было зафиксировано моя ошибка. (Также на всякий случай, если кто-нибудь спросит, откуда я его изложил, прежде чем перезапускать.) Однако он изменил мою ошибку. Он удалил дополнительный/bin/java.

mvn -version 
     Error: JAVA_HOME is not defined correctly. 
     We cannot execute /usr/libexec/java_home/bin/java 

JAVA_HOME:

echo $JAVA_HOME 
     /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home 

** внимание я попробовал синтаксис $(), и это не исправить эту проблему.

+0

Вы вставляли пробелы в 'export JAVA_HOME =/usr/libexec/java_home'? Можете ли вы открыть окно терминала и выполнить 'echo $ JAVA_HOME', и сообщить нам результат? – RealSkeptic

+0

echo $ JAVA_HOME /usr/libexec/java_home. Нет пробелов. это JAVA_HOME = (/ usr /.../ java_home) – Tai

+0

Я предполагаю, что в ваших источниках был потерян синтаксис оболочки backtick (заменяющий значение выходом команды). $() Является альтернативным синтаксисом: 'JAVA_HOME = \' java_home \ '' – eckes

ответ

26

Вы пропустили на одной маленькой вещи, я считаю:

export JAVA_HOME=$(/usr/libexec/java_home) 
       ⬆︎ 
      This dollar sign

Это говорит оболочке «Значение этого выражения является выход из выполнения следующей команды (/usr/libexec/java_home)

Выполнение команды дает правильный java-сайт для mac (если у вас установлен один JDK), и это значение помещается в JAVA_HOME. Без знака доллара он просто укажет имя команды.

+0

О, потрясающе. Я это исправил. Теперь я получаю echo $ JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home, однако maven все еще не работает: mvn -version Ошибка: JAVA_HOME не определен правильно. Мы не можем выполнить/usr/libexec/java_home/bin/java – Tai

+0

Вы экспортировали его? или вы действительно вошли в систему снова (или источники .bashrc). – eckes

+0

I source ~/.bash_profile, – Tai

0

Следуйте по этой ссылке: https://stackoverflow.com/a/44564303/5005676 Если вы видите МВН скрипт: Код не может здесь ---

Шаги для отладки и фиксации:

Шаг 1: Откройте МВН скрипт/Users/Имя пользователя/apache-maven-3.0.5/bin/mvn (Открыть с меньшей командой: less /Users/Username/apache-maven-3.0.5/bin/mvn)

Шаг 2: Узнайте ниже код в сценарий:

if [ -z "$JAVACMD" ] ; then 
    if [ -n "$JAVA_HOME" ] ; then 
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 
     # IBM's JDK on AIX uses strange locations for the executables 
     JAVACMD="$JAVA_HOME/jre/sh/java" 
    else 
     JAVACMD="$JAVA_HOME/bin/java" 
    fi 
    else 
    JAVACMD="`which java`" 
    fi 
fi 

if [ ! -x "$JAVACMD" ] ; then 
    echo "Error: JAVA_HOME is not defined correctly." 
    echo " We cannot execute $JAVACMD" 
    exit 1 
fi 

Этап 3: Это происходит потому, что переменная JAVACMD не была установлена. Таким образом, отображается ошибка.

Примечания: Для того, чтобы исправить ее

export JAVACMD=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java 

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/ 

Ключа: Если вы хотите быть постоянно открытой Emacs .profile

отправлять команды и нажмите Ctrl-X Ctrl-C (копи-буфера, убить -Терминал).

0

В моем случае у меня было две записи для JAVA_HOME в моем файле ~/.bash_profile, и последний имел приоритет. Я просто удалил тот, который был неправильным, и он сработал.

 Смежные вопросы

  • Нет связанных вопросов^_^