前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NB: JAVA_HOME should point to a JDK not a JRE

NB: JAVA_HOME should point to a JDK not a JRE

作者头像
geekfly
发布2022-04-24 14:57:42
3.6K0
发布2022-04-24 14:57:42
举报
文章被收录于专栏:geekfly

在Centos 6.10上部署项目前,使用yum安装jdk,配置环境变量,java -version正常输出,java -jar xx.jar能正常运行Spring Boot项目。但安装Maven并配置后报错。

错误信息

代码语言:javascript
复制
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

解决方案

在Maven->bin目录下,Linux系列的服务器和Mac修改mvn文件,添加本机的jdk目录到如下位置,引号可复制该文档里的。

在这里插入图片描述
在这里插入图片描述

Windows下修改mvn.bat同样位置添加:set JAVA_HOME=D:\Java\jdk1.8.0_101

以下为详细经历过程

最开始/etc/profile配置如下:

代码语言:javascript
复制
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar、
export PATH=$PATH:$JAVA_HOME/bin

查看目录后发现没有bin目录,以为yum安装的有问题,后改为解压版,并删除所有Jdk相关文件。

Jdk和Maven均为从官网下载后,解压到服务器上的。 路径为:/root/soft/jdk1.8.0_221/root/soft/apache-maven-3.5.4

/etc/profile中已配置JAVA_HOMECLASSPATH,具体如下:

代码语言:javascript
复制
JAVA_HOME=/root/soft/jdk1.8.0_221
JRE_HOME=/root/soft/jdk1.8.0_221/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH

M2_HOME=/root/soft/apache-maven-3.5.4
PATH=$M2_HOME/bin:$PATH
export M2_HOME PATH

运行java -version正常输出:

代码语言:javascript
复制
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

运行mvn -version还是输出开始的错误,echo $PATHwhich java输出均正常。连续几天折腾N个小时,翻遍谷歌百度,还是没解决。 在解决maven报错JAVA_HOME should point to a JDK not a JRE 博客中找到思路。 在Maven文件夹中的bin目录下,查看启动脚本(Unix上名为mvn文件,Windows上为mvn.cmd),以mvn为例:

代码语言:javascript
复制
if $cygwin ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`cygpath --unix "$MAVEN_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi

# For MinGW, ensure paths are in Unix format before anything is touched
if $mingw ; then
  [ -n "$MAVEN_HOME" ] &&
    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
  # TODO classpath?
fi
JAVA_HOME=`/root/soft/jdk1.8.0_221`  # 我加的!!!
if [ -z "$JAVA_HOME" ] ; then
  JAVACMD=`which java`
else
  JAVACMD="$JAVA_HOME/bin/java"
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "The JAVA_HOME environment variable is not defined correctly" >&2
  echo "This environment variable is needed to run this program" >&2
  echo "NB: JAVA_HOME should point to a JDK not a JRE" >&2
  exit 1
fi

脚本中就是判断系统变量是否存在,应该就是这个地方出问题了,按照博文中的说明加上jdk的位置。搞定!!!!

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 错误信息
  • 解决方案
  • 以下为详细经历过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档