NB: JAVA_HOME should point to a JDK not a JRE
在Centos 6.10上部署項目前,使用yum安裝jdk,配置環境變量,java -version正常輸出,java -jar xx.jar能正常運行Spring Boot項目。但安裝Maven並配置后報錯。
錯誤信息
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
1
2
3
解決方案
在Maven->bin目錄下,Linux系列的服務器和Mac修改mvn文件,添加本機的jdk目錄到如下位置,引號可復制該文檔里的。
Windows下修改mvn.bat同樣位置添加:set JAVA_HOME=D:\Java\jdk1.8.0_101
以下為詳細經歷過程
最開始/etc/profile配置如下:
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
1
2
3
查看目錄后發現沒有bin目錄,以為yum安裝的有問題,后改為解壓版,並刪除所有Jdk相關文件。
Jdk和Maven均為從官網下載后,解壓到服務器上的。
路徑為:/root/soft/jdk1.8.0_221和/root/soft/apache-maven-3.5.4
在/etc/profile中已配置JAVA_HOME和CLASSPATH,具體如下:
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
1
2
3
4
5
6
7
8
9
運行java -version正常輸出:
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)
1
2
3
運行mvn -version還是輸出開始的錯誤,echo $PATH 和 which java輸出均正常。連續幾天折騰N個小時,翻遍谷歌百度,還是沒解決。
在解決maven報錯JAVA_HOME should point to a JDK not a JRE
博客中找到思路。
在Maven文件夾中的bin目錄下,查看啟動腳本(Unix上名為mvn文件,Windows上為mvn.cmd),以mvn為例:
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
腳本中就是判斷系統變量是否存在,應該就是這個地方出問題了,按照博文中的說明加上jdk的位置。搞定!!!!
點贊 1
————————————————
版權聲明:本文為CSDN博主「geekfly」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/TMaskBoy/article/details/99875484