错误:执行maven时未正确定义JAVA_HOME

错误:执行maven时未正确定义JAVA_HOME,java,maven,java-home,Java,Maven,Java Home,我安装了java并设置了路径环境,当我在终端中运行echo$java_HOME时,我得到以下输出: /usr/lib/jvm/java-7-oracle/jre/bin/java 我还安装了apachemaven并更改了environment文件,现在看起来是这样的: JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre/bin/java" M2_HOME=/usr/local/apache-maven/apache-maven-3.0.5 M

我安装了java并设置了路径环境,当我在终端中运行
echo$java_HOME
时,我得到以下输出:

/usr/lib/jvm/java-7-oracle/jre/bin/java
我还安装了
apachemaven
并更改了
environment
文件,现在看起来是这样的:

JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre/bin/java"
M2_HOME=/usr/local/apache-maven/apache-maven-3.0.5
M2=$M2_HOME/bin
MAVEN_OPTS="-Xms256m -Xmx512m"
PATH=$M2:$PATH
但是当我执行
mvn--version
时,我得到一个警告:

Error: JAVA_HOME is not defined correctly.
  We cannot execute /usr/lib/jvm/java-7-oracle/jre/bin/java/bin/java

无法找出它为什么会重复
/bin/java/bin/java
java\u HOME应该是
/usr/lib/jvm/java-7-oracle/jre/
应该是安装java的目录,而不是它的一部分:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

在我的例子中,您必须使用安装java的整个目录:

export JAVA_HOME=/usr/java/jdk1.8.0_31

假设您使用bashshell并在Oracle安装程序中安装Java,您可以将以下内容添加到
.bash\u配置文件中

export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/jre/bin:$PATH
这将选择Oracle安装程序定义的正确的
JAVA_HOME
,并首先在
$PATH
中设置它,确保找到它

另外,您不需要在以后更新Java时更改它

编辑

Apache Maven 3.6.0 Maven home: /usr/share/maven Java version: 11.0.10, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64 Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "5.4.0-70-generic", arch: "amd64", family: "unix" 根据评论:

重新启动后使其持久化

只需在shell配置文件中添加这些行。(假设是
bash

例如:
.bashrc
.bash\u profile
.profile
(用于ubuntu)

使用自定义Java安装

JAVA_HOME
设置为自定义JAVA安装路径的根文件夹,而不使用
$()


例如:
JAVA\u HOME=/opt/JAVA/openjdk
您应该按原样设置export
JAVA\u HOME=/usr/JAVA/jdk1.8.0\u 31
并使用
sudo
运行,它将按如下所示执行

示例

sudo mvn -v
输出

Apache Maven 3.6.0 Maven home: /usr/share/maven Java version: 11.0.10, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64 Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "5.4.0-70-generic", arch: "amd64", family: "unix" ApacheMaven 3.6.0 Maven home:/usr/share/Maven Java版本:11.0.10,供应商:Ubuntu,运行时:/usr/lib/jvm/Java-11-openjdk-amd64 默认区域设置:en_US,平台编码:UTF-8 操作系统名称:“linux”,版本:“5.4.0-70-generic”,arch:“amd64”,系列:“unix”
首先,在开发模式中,应该使用JDK而不是JRE。 其次,JAVA_HOME是您安装JAVA的地方,所有其他框架都将在这里搜索他们需要的东西(JRE、javac等等)

所以如果你设定

JAVA_HOME=/usr/lib/jvm/JAVA-7-oracle/jre/bin/JAVA

当您运行“mvn”命令时,Maven将尝试通过添加/bin/java来访问java,认为java_HOME位于java安装的根目录中

但是设置

JAVA_HOME=/usr/lib/jvm/JAVA-7-oracle/


Maven将访问add bin/java,然后它将正常工作。

我们打开一个终端,查找java的位置:

manuel@zonademanel:~ → whereis java
java:/usr/bin/java/etc/java/usr/bin/X11/java/usr/share/java /usr/share/man/man1/java.1.gz

我们要查找的是命令行上的/usr/bin/java continue以查找绝对路径,因为这只是一个符号链接

manuel@zonademanel:~ → ls -lah /usr/bin/java
lrwxrwx 1 root root 2015年5月19日22日/usr/bin/java-> /etc/alternations/java

lrwxrwx 1根目录39 dic 7 11:52/etc/alternations/java-> /usr/lib/jvm/java-8-oracle/jre/bin/java

我用以下值修改了我的/etc/environment文件

PATH=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/jre/bin” JAVA_HOME=“/usr/lib/jvm/JAVA-8-oracle/jre

如果我不想重新登录,我可以使用以下命令重新加载更改:

source /etc/environment 
​​并正确运行mvn-version

manuel@zonademanel:~ → mvn -version
ApacheMaven 3.0.5
Maven home:/usr/share/Maven
Java版本:1.8.0_77,供应商:Oracle公司
Java主页:/usr/lib/jvm/Java-8-oracle/jre
默认区域设置:es_MX,平台编码:UTF-8
操作系统名称:“linux”,版本:“3.16.0-70-generic”,arch:“amd64”,系列:“unix”


由于两个原因,您可能会出现此错误。要快速解决此问题,请执行以下步骤

首先找到java位置。要获取已安装Java平台的列表,请从终端运行以下命令:

$ sudo update-alternatives --config java
现在设置JAVA_主页和路径

$ export JAVA_HOME=<java_home>

$ export PATH=$JAVA_HOME/jre/bin:$PATH
上述命令将创建系统试图在您的问题中查找的符号链接位置

最后做

$ mvn --version

发生这种情况的原因如下:

如果您看到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(保存缓冲区终止终端)。

如果使用mac OS,
导出JAVA_HOME=/usr/libexec/JAVA_HOME
需要更改为
导出JAVA_HOME=$(/usr/libexec/JAVA_HOME)
。 执行此操作的步骤:

 $ vim .bash_profile

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

 $ source .bash_profile
其中
/usr/libexec/java_home
是jvm的路径

使用以下两个命令(对于java 8):


这个解决方案对我有用。。。 打字
export PATH=$JAVA_HOME/jre/bin:$PATH
在终端中 然后运行
mvn-version
它将显示相同的错误,但日志如下

which: no javac in (/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin)
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30)
Maven home: /opt/apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
现在复制
Java home
路径,即在我的例子中,
/usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre

现在输入

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
错误得到解决。
注意:粘贴您自己的路径,该路径由您的计算机在export JAVA_HOME的mvn日志中显示。

在我的情况下,问题出在vscode中

我使用windows并在我的计算机上安装了Ubuntu,所以vscode终端使用Ubuntu。我只需转到settings.json并再次更改为cmd.exe

我遇到了同样的问题
sudo update-java-alternatives --set java-8-oracle
java -XshowSettings 2>&1 | grep -e 'java.home' | awk '{print "JAVA_HOME="$3}' | sed "s/\/jre//g" >> /etc/environment
which: no javac in (/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin)
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30)
Maven home: /opt/apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
   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 [ -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"
    fi
  else
    JAVACMD="`which java`"
  fi
fi