今天讲下使用CentOS中遇到的一些坑,之前在项目中一直使用的都是IBM的AIX或者是Redhat的Linux,因为我所管的系统要整体迁到CentOS上为后续部署docker做准备,所以最近几天一直在和CentOS打交道,之前觉得都是linux内核的系统应该没有问题,但是在实际使用过程中,还是有一些小坑的。
这次说下如何替换CentOS中默认的JDK,之前在AIX下只需要设置/etc/profile中的JAVA_HOME、PATH、CLASSPATH这些环境变量就可以了,下次进入终端就会生效,但是在CentOS下试了半天始终没有生效。每次设置完了之后在命令行输入java -version都还是显示系统默认的JDK,网上查了很多帖子说的也都是只言片语不够详细。后来看了几篇帖子,自己也根据以往的经验琢磨了下,终于解决,整理了以下的一些步骤。
检查原系统中JDK版本
[root@localhost open-gateway]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
通过which java命令可以查看当前使用的JDK的安装目录,CentOS自带的JDK是安装在/usr/lib/jvm/下
[root@localhost open-gateway]# which java
/usr/lib/jvm/jdk-8u65-linux-x64/jdk1.8.0_65/bin/java
安装需要的JDK
从官网下载需要的JDK版本,我们下载了JDK1.8.0_144这个版本,准备在CentOS上安装这个版本的JDK。
官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
解压下载下来的压缩包
[root@localhost Downloads]# gzip -d jdk-8u144-linux-x64.tar.gz
[root@localhost Downloads]# tar -xvf jdk-8u144-linux-x64.tar
修改环境变量
通过vi修改etc目录下的profile文件里的环境变量,如果系统中已经有了profile可以直接打开按i键进入编辑模式进行编辑,如果没有的话会自动新建profile文件,etc目录下的profile文件可以理解成系统启动时候会自动设置的环境变量,不用每次打开都去设置session的环境变量,如果只是在会话窗口设置JAVE_HOME、PATH这些环境变量,那么一旦会话窗口关闭,那么这些环境变量将失效。
[root@localhost open-gateway]# vi /etc/profile
在profile文件的最前面加上需要export的环境变量,这里需要设置以下几条,JAVA_HOME、JRE_HOME、CLASSPATH、PATH,还需要非常注意的一点是,一定要把需要设置的jdk路径放在最前面,因为系统找环境变量的顺序是,找到这个环境变量后不会再继续往后找,所以,如果是加在末尾则会一直使用旧的javahome,还有个需要注意的地方,CentOS中的环境变量是通过冒号:进行分割的,其他linux系统中大部分都是通过分号;进行分隔的,开始就是自己想当然按照分号分隔,怎么都不生效。。。希望大家不要再犯我犯的错误。
# /etc/profile
export JAVA_HOME=/usr/lib/jvm/jdk-8u144-linux-x64/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar$CLASS_PATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
设置完成后我们需要使用source命令刷新当前会话的环境变量。
source /etc/profile
这时我们查看环境变量发现,环境变量都生效了,但是当我们java -version的时候发现版本还是老版本,当时我的画面是黑人问号,接下来又想了想可能是系统自带的openjdk注册了系统服务,导致只改环境变量还不行,所以下了一个杀招,卸载系统自带JDK。
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.x86_64
再重新source下profile发现,这时java -version就是自己下载的版本了。
[root@localhost open-gateway]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)