在linux系统中,由于涉及到版权问题,在大部分linux系统的发行版本中,默认都安装了OpenJDK,并且OpenJDK的java命令也已经加入到环境变量中了。

在刚装好的linux系统中,运行java -version,输出如下(根据JDK版本不同,输出的版本可能不同):

java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)

但在进行java开发时,我们大多是需要使用Sun(准确的说应该是Oracle)的JDK,所以我们会去Oracle官网下载相应版本的JDK进行安装。

如何在linux上安装,在此不在赘述。

在linux上安装完JDK后,我们会在~/.bash_profile 把安装的java加入到环境变量中。原以为就万事大吉了,在运行java程序时会使用自己安装的JDK。

如果你是这么想的就大错特错了,在文章开头讲的,由于linux系统的发行版中默认安装的时OpenJDK,尽管我们把安装的SunJDK的java命令也加入到环境变量中,但是我们运行

java -version,输出确还是和之前一样:

java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)

这要这么破!!!

一、查找原因

不急,先运行

whereis java,输出如下:
java: /usr/bin/java /etc/java /usr/lib/java /usr/share/java /opt/java/bin/java

在几个地方有java命令,其中/opt/java/bin/java是我自己安装的SunJDK的java命令所在的目录,而/usr/bin/java是系统中默认安装的java命令所在的目录。

原因就在这,

我们执行

ls -la /usr/bin/java,输入如下:

lrwxrwxrwx 1 root root 22 May 14 16:53 /usr/bin/java -> /etc/alternatives/java

一看这是一个软连接,我们cd到/etc/alternatives目录下看个究竟,

然后执行 ls -la,输入比较多,而且很多软链,其中有一个

lrwxrwxrwx  1 root root   46 May 14 18:22 java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

到此,应该明白了,java命令其实指向的是OpenJDK中的java命令,所以才会出现我们把自己安装的SunJDK的java命令配置到环境变量中后,依然不起作用。

所以我们要做的就是需要把java的软链指向我们自己安装的SunJDK的java命令,也即/opt/java/bin/java。

二、使用安装的JDK替代系统默认的OpenJDK

linux中提供了update-alternatives命令,update-alternatives是linux系统(大部分linux系统都支持此命令)中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,而所有的这些就构成了备选方案系统(alternatives system)。

很多时候我们会将拥有相同或相似功能的不同应用程序安装在同一个操作系统上,例如同一个操作系统上的不同文本编辑器。这给了这个系统的用户在编辑文本时有了更多的选择,如果用户愿意他们可以自由选择任意一个来使用。

其实update-alternatives命令的功能很好理解,举个例子:在Window系统中,如果我们安装多个浏览器,比如有火狐、有IE、有360、有Chrome等,当我们从某个链接进去打开网页时,可能会问你使用哪个浏览器,当你选择某个浏览器时,此浏览器会问你是否把它作为默认浏览器,如果你选择了是,那下次点开某个链接时,就直接使用默认浏览器打开了!

现在我们在系统中同时安装了open jdk和sun jdk两个版本,(由于linux发行版本中默认使用OpenJDK的java命令 )而我们又希望系统默认使用的是sun jdk,那怎么办呢?通过update-alternatives就可以很方便的实现了。

首先运行以下命令查看java当前的默认配置

update-alternatives --display java,输出如下(后面有省略):
java - status is manual.
 link currently points to /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java - priority 170131
 slave keytool: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/keytool
 slave orbd: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/orbd
......

可以从输出中看到系统中java默认使用的OpenJDK,其中数字170131表示优先级。

2.1 下面进入正式配置阶段

1. 把自己安装的SunJDK加入到备选系统中

运行命令(注意命令最后的数字表示优先级,其中170130 为SunJDK的alternative的优先级)

update-alternatives  --install /usr/bin/java java /opt/java/bin/java 170130

2. 选择自己安装的SunJDK作为首选java命令

运行命令

update-alternatives --config java,输出如下

There are 2 programs which provide 'java'.

Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /opt/java/bin/java

Enter to keep the current selection[+], or type selection number:

config命令是交互式的命令,可以根据提示进行选择,此处我们选择2,即使用安装的SunJDK的java命令,然后按回车键!

至此,配置完成了!

说明:在配置步骤1中,我们指定SunJDK的优先级是170130(比当前优先级170131低),所以需要进行步骤二进行手动选择;如果我们指定的优先级比当前优先级170131高,则步骤二可以省略,系统自动会选择优先级高的作为默认alternative!

关于update-alternatives命令更详细的说明,请参照

1.http://www.cnblogs.com/pengdonglin137/p/3462492.html

2. http://www.mamicode.com/info-detail-1144825.html

3. http://persevere.iteye.com/blog/1479524
参考:

http://www.cnblogs.com/imyalost/p/8745137.html

linux下如何使用自己安装的SunJDK替换默认的OpenJDK的更多相关文章

  1. Linux下apache+phppgadmin+postgresql安装配置

    Linux下apache+phppgadmin+postgresql安装配置 操作系统:CentOS 安装包:httpd(首选yum), php(包括php以及php-pgsql,php-mbstri ...

  2. Linux下的网络远程安装

    Linux下的网络远程安装 1.用RHEL6.5光盘安装第一台服务器 2.在第一台服务器上配置YUM服务器 先创建一个挂载 #mount #umount /dev/cdrom #mkdir /mnt/ ...

  3. Linux下指定版本编译安装LAMP

    说明: 操作系统:CentOS 6.5 64位 需求: 编译安装LAMP运行环境 各软件版本如下: MySQL:mysql-5.1.73 Apache:httpd-2.2.31 PHP:php-5.2 ...

  4. 【转】Linux下XenServer管理工具安装

    转载文章 - Linux下XenServer管理工具安装 Xen-Server 6.5 虚拟机安装Linux系统 vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) ...

  5. linux下.run文件的安装与卸载

    linux下.run文件的安装与卸载   .run文件的安装很简单,只需要为该文件增加可执行属性,即可执行安装 以 virtualbox 的安装文件 virtualbox-3.1.6-59338-Li ...

  6. Linux下rar unrar的安装

    Linux下rar unrar的安装: 以3.8.0版本为例,如果是64位平台,执行以下命令,也可以去官方网站:)下载最新版: wget http://www.rarlab.com/rar/rarli ...

  7. 【转】Linux下Android ADB驱动安装详解

    原文网址:http://blog.csdn.net/zhenwenxian/article/details/5901350 Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比 ...

  8. Linux下的Oracle 11gr2安装完成的的自启动操作。

    Linux下的Oracle在安装结束后是处于运行状态的.重启机器后,Oracle不会像在Windows下那样将Oracle添加到Windows服务,在linux下需要手动启动Orcle服务 以orac ...

  9. Linux下查看MySQL的安装路径

    Linux下查看mysql.apache是否安装,并卸载. 指令 ps -ef|grep mysql 得出结果 root               ?        :: /bin/sh /usr/ ...

随机推荐

  1. c#自定义控件做漂亮的列表

    效果图如下: 完整项目代码下载: 点击下载

  2. 依赖注入框架Google Guice 对象图

    GettingStarted · google/guice Wiki https://github.com/google/guice/wiki/GettingStarted sameb edited ...

  3. Android设置透明状态栏和透明导航栏

    Android透明状态栏只有在4.4之后有. 在代码中加入下面几行代码即可实现

  4. 借助 Django 的 smart_str 和 smart_unicode 进行编码转换(转)

    原文:http://www.dirk.sh/diary/using-django-smart_str-smart_unicode/ Django 为字符编码的转换提供了非常简洁的方法: 1.djang ...

  5. Docker中安装配置Oracle数据库

    本文使用的OS是Ubuntu([16.04.1_server][1])[注:Ubuntu是安装在vmware虚拟机上的]. 其他的Oracle连接工具:[sqldeveloper-4.1.5.21.7 ...

  6. 纯css,div隐藏滚动条,保留鼠标滚动效果。

    示例1: html,body { height: 100%; } body { overflow: hidden; } .full-screen { position: relative; width ...

  7. html5 live stream

    一.传统的安防监控/流媒体音视频直播基本架构 A/V device 信号采集(yuv/rgb) ---> 转码(h264/265) ---> 网络推送(rtsp/rtmp/http/onv ...

  8. Jmeter(二)参数化

    参数化是自动化测试脚本的一种常用技巧.简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则:这样,脚本在运行时就可以根据需要选取不同的参数值作为输入.这 ...

  9. Tomcat启动慢但是不报错的解决办法

    参考文章:https://blog.csdn.net/xiaoxinyu316/article/details/39064003 可以查看下tomat的启动日志,看看有哪些比较耗时的操作: grep ...

  10. strtoul函数的使用

    函数原型: unsigned long strtoul(const char *nptr,char **endptr,int base ) 参数1:字符串起始地址参数2:返回字符串有效数字的结束地址, ...