mvn -version错误:我们无法执行/ usr / libexec / java_home / bin / java

时间:2015-01-21 22:41:39

标签: java macos bash maven .bash-profile

====== 编辑2:

我在编辑1中使用了与下面提到的相同的代码,我的错误显然不在代码本身,而是由于源〜/ .bash_profile未按预期更新我的文件。我想,不过(谢谢你@eckes)请看看maven bug :(顺便说一句:jira.codehaus.org/browse/MNG-5686 - eckes 39秒前)

编辑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

======= 我从oracle安装了最新的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但是最近的文档声明我可以使用brew(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我相信。但它似乎可能是一个修复。

新mac(https://apple.stackexchange.com/questions/26928/no-bash-profile-in-os-x-lion

上没有bash_profile

所以我创建并编辑了我的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和brew安装的maven?我正在使用运行Yosemite的MacBook Pro(Retina,13英寸,2014年中)。我以前安装过这样的设置,但从未遇到过这个问题。

**注:

我发现了这个:http://www.mkyong.com/java/maven-java_home-is-not-defined-correctly-on-mac-osx/

我认为这肯定是我的修复。如果我错了,请纠正我,但我相信差异是括号。

例如:

 export JAVA_HOME=/usr/libexec/java_home

VS

 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

**注意我尝试了$()语法,但这并没有解决问题。

4 个答案:

答案 0 :(得分:28)

我错过了一件小事,我相信:

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

这告诉shell“此表达式的值是执行以下命令(/usr/libexec/java_home))的输出”

运行该命令为mac提供了正确的java主目录(如果安装了单个JDK),并且该值放在JAVA_HOME中。没有美元符号,它只是将命令的名称放在那里。

答案 1 :(得分:2)

我在.bash_profile上写下这些行,然后为我工作。

export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=/Users/(YOUR USER)/Documents/apache-maven-3.0.3/bin:$PATH
export PATH=$JAVA_HOME/jre/bin:$PATH

注意:在macOS Sierra上工作(10.12.6)

答案 2 :(得分:0)

Follow this link : https://stackoverflow.com/a/44564303/5005676 If you see the mvn script: The code fails here ---

Steps for debugging and fixing:

Step 1: Open the mvn script /Users/Username/apache-maven-3.0.5/bin/mvn (Open with the less command like: less /Users/Username/apache-maven-3.0.5/bin/mvn)

Step 2: Find out the below code in the script:

  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

Step3: It is happening because JAVACMD variable was not set. So it displays the error.

Note: To Fix it

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/

Key: If you want it to be permanent open emacs .profile

post the commands and press Ctrl-x Ctrl-c ( save-buffers-kill-terminal ).

答案 3 :(得分:0)

在我的情况下,我在〜/ .bash_profile中有两个JAVA_HOME条目,最后一个条件优先。我刚刚删除了一个错误的并且有效。