linux服务器java环境变量问题

# 问题背景

在一台服务器上编译java项目时,遇到了报错"程序包javafx.scene不存在",查了一下原来服务器上安装的是Open JDK(没有jfxrt.jar这个包)。干脆直接换Oracle JDK吧。华为云 jdk 镜像 (opens new window) 从这里很容易下载解压好了。然后肯定要修改java环境变量为新的这个。

明明已经在 /etc/profile 中做了如下修改,并且已经 source /etc/profile 让它生效了:

JAVA_HOME=/usr/lib/jvm/jdk1.8.0_202
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib
export JAVA_HOME CLASSPATH PATH
1
2
3
4

但是java -version一看,好家伙还是Open JDK的版本。到底是什么问题呢?

# 排查原因

首先which java看一下当前java命令的路径,注意这里看到的可能只是一个软链接的路径,再用ls -l命令看一下到底链接到哪里了。

然后很容易看出来,当前执行的java命令链接到的还是原来的Open JDK的路径。

把原来的这些java相关的软链接都删掉,再次执行which java

[root@localhost jvm]# which java
/usr/lib/jvm/jdk1.8.0_202/bin/java
1
2

这下看起来就对了,java -version再确认一下果然已经换成了Oracle JDK的版本。

# 总结

因为系统的$PATH中已经配了很多路径,在执行某个命令时应该用的是最先匹配到的那个,所以才看起来明明环境变量生效了,执行的却不是想要的版本。

有了这次的经验,以后遇到类似问题应该很容易排查了😂