mvn -version 错误:我们无法执行 /usr/libexec/java_home/bin/java
Posted
技术标签:
【中文标题】mvn -version 错误:我们无法执行 /usr/libexec/java_home/bin/java【英文标题】:mvn -version error: We cannot execute /usr/libexec/java_home/bin/java 【发布时间】:2015-03-20 14:53:17 【问题描述】:====== 编辑2:
我在编辑 1 中使用了与下面提到的相同的代码,我的错误显然不在代码本身,而是由于源 ~/.bash_profile 没有按预期更新我的文件。我认为,但是(谢谢@eckes)请查看 maven 错误:(顺便说一句: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上没有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 中遇到过这个问题,并且 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
对
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
**注意我尝试了 $() 语法,但这并没有解决问题。
【问题讨论】:
您是否在export JAVA_HOME = /usr/libexec/java_home
中插入了空格?你能打开一个终端窗口并echo $JAVA_HOME
,然后告诉我们结果吗?
回显 $JAVA_HOME /usr/libexec/java_home.没有空格。它是 JAVA_HOME=(/usr/.../java_home)
我猜你的源代码中丢失了反引号 shell 语法(用命令的输出替换值)。 $() 是替代语法:JAVA_HOME=`java_home`
@eckes 等一下,你能解释一下吗?我将它切换到 $() 仍然无法正常工作?
两者都是正确的。您只需要确保在当前会话中运行命令并将其导出。您的错误消息显示 mvn 仍然看到旧值。但首先,只需将其设置为固定字符串并尝试。如果这不起作用,您还有另一个问题(例如 mvn 脚本被修改或类似)。
【参考方案1】:
我相信你错过了一件小事:
导出 JAVA_HOME=$(/usr/libexec/java_home) ⬆︎ 这个美元符号
这告诉shell“这个表达式的值是执行以下命令的输出(/usr/libexec/java_home)
)”
运行该命令会为 mac 提供正确的 java home(如果您安装了单个 JDK),并且该值放置在 JAVA_HOME 中。没有美元符号,它只是把命令的名字放在那里。
【讨论】:
哦,太棒了。我修好了。我现在得到 echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home,但是 maven 仍然没有运行:mvn -version 错误:JAVA_HOME 定义不正确。我们无法执行 /usr/libexec/java_home/bin/java 你导出了吗?还是您真的再次登录(或来源 .bashrc)。 您是否在不同的选项卡或终端窗口中运行 mvn? 我欠你一盒糖果。【参考方案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) 上工作
【讨论】:
【参考方案3】:点击此链接:https://***.com/a/44564303/5005676 如果您看到 mvn 脚本:代码在此处失败 ---
调试和修复步骤:
第 1 步:打开 mvn 脚本 /Users/Username/apache-maven-3.0.5/bin/mvn(使用 less 命令打开,例如: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 ( save-buffers-kill-terminal )。
【讨论】:
【参考方案4】:在我的情况下,我的 ~/.bash_profile 中有两个 JAVA_HOME 条目,最后一个优先。我刚刚删除了错误的那个,它起作用了。
【讨论】:
以上是关于mvn -version 错误:我们无法执行 /usr/libexec/java_home/bin/java的主要内容,如果未能解决你的问题,请参考以下文章
scalac 错误:错误选项:通过命令行在 mvn 包上执行“-make:transitive”
使用 mvn flyway:migrate 的 Flyway 迁移给出“迁移 1.0.53 不匹配”错误
idea中的终端terminal使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet函数脚本文件或可运行程序的名称。
mvn -v 错误: 找不到或无法加载主类 org.codehaus.plexus.classworlds.launcher.Launcher