linux下使用update-alternatives切换java版本的正确姿势

关于update-alternatives命令的使用,请见: http://blog.csdn.net/54powerman/article/details/54572195

之前的文章说明了使用文件夹管理来代替原来的当个命令配置的方式,不过这个是属于个人使用的方式,并不是规范的通用的方式。

按照默认的方式,每一个软件包对应的命令都是分别设置的,这样的好处是,可以不同的命令使用不同的版本。如java使用1.9,javap使用1.8

还是以java为例,它默认配置了”java/javac/appletviewer/jconsole”。

在新安装了一个版本的时候,为了保留旧的版本,而让新版本生效,首先要做的是看一下旧版本的优先级是多少,如:

sudo update-alternatives --display javac

javac - auto mode
  link best version is /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
  link currently points to /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
  link javac is /usr/bin/javac
  slave javac.1.gz is /usr/share/man/man1/javac.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/bin/javac - priority 1081

这里我们看到目前的java版本是java-8,其优先级是1081。

那么我要们安装java-9,而让他自动生效,那么我们就要让他的优先级大于1081,如设置为3000。

明确了这个前提,那就开始安装java-9。

sudo apt-get install -yqq openjdk-9-jdk

安装完后,会提示安装到哪里去了,ubuntu默认是:”/usr/lib/jvm/java-9-openjdk-amd64”

那么,我测试时发现安装程序只设置了appletviewer和jconsole,没关系我并不关心这个,下面自己自己设置要使用的命令和优先级:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-9-openjdk-amd64/bin/java 3000

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-9-openjdk-amd64/bin/javac 3000

sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java-9-openjdk-amd64/bin/jar 3000

sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/java-9-openjdk-amd64/bin/javah 3000

sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/java-9-openjdk-amd64/bin/javap 3000

sudo update-alternatives --install /usr/bin/jshell jshell /usr/lib/jvm/java-9-openjdk-amd64/bin/jshell 3000

sudo update-alternatives --install /usr/bin/jconsole jconsole /usr/lib/jvm/java-9-openjdk-amd64/bin/jconsole 3000

#如果还需要其他命令,自行添加,如:jmap/jps

接下来,检查一下:

$ sudo update-alternatives --display javac
javac - auto mode
  link best version is /usr/lib/jvm/java-9-openjdk-amd64/bin/javac
  link currently points to /usr/lib/jvm/java-9-openjdk-amd64/bin/javac
  link javac is /usr/bin/javac
  slave javac.1.gz is /usr/share/man/man1/javac.1.gz
/usr/lib/jvm/java-8-openjdk-amd64/bin/javac - priority 1081
  slave javac.1.gz: /usr/lib/jvm/java-8-openjdk-amd64/man/man1/javac.1.gz
/usr/lib/jvm/java-9-openjdk-amd64/bin/javac - priority 3000

$ java -version
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src)
OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)

可以看到生效了。

这有一个前提是,每一个命令都是auto 模式,这样才会自动选择优先级高的。为了确保,可以不用管现在的状态,直接设置一遍这些命令为auto模式。

sudo update-alternatives --auto java
sudo update-alternatives --auto javac
sudo update-alternatives --auto javap
sudo update-alternatives --auto javah
sudo update-alternatives --auto jconsole
sudo update-alternatives --auto jshell

好了,可以自由的使用java-9了。

时间: 2024-09-15 13:59:41

linux下使用update-alternatives切换java版本的正确姿势的相关文章

linux下遇到no db2jcct2 in java.library.path

问题描述 linux下遇到no db2jcct2 in java.library.path 我在Linux下的tomcat里有一个web工程要连接远程的DB数据库,db的jar包已经放入工程lib里也可以load到,但连接时报错no db2jcct2 in java.library.path.但如果写个主程序的jar包用脚本运行的话又可以正常连接上数据库 上IBM的网站看好像是因为缺少了libdb2jcct2.so文件. 有没人遇过这问题,或者有libdb2jcct2.so这个文件,麻烦传我一个

Ubuntu中使用update-alternatives命令切换JAVA版本

之前ubuntu系统的jdk是apt-get install命令安装,默认装的是openjdk,路径在/usr/lib/jvm/.如果需要切换,或者升级java版本,那么可以使用update-alternatives来完成.当然你可以卸载重新安装,也可以通过设置环境变量安装.这里介绍使用update-alternatives安装的用法. Linux 发展到今天,可用的软件已经非常多了.这样自然会有一些软件的功能大致上相同.例如,同样是编辑器,就有 nvi.vim.emacs.nano,而且我说的

Linux上如何安装并切换最新版本的Python 3.6

Python 是 Linux 中一种最流行的编程语言.它被写成了各种工具和库.除此之外,Python 在开发者之间很流行因为它非常简单,并且实际很容易掌握.如果你安装了 Linux 系统,正在学习 Python 并想要使用最新的版本的话,那么这篇文章就是为你而写的.现在我已经安装好了 Linux Mint 18.默认安装的版本是 2.7 和 3.5.你可以用这个命令检查: $ python -V  $ python2 -V  $ python3 -V  安装最新的 Python 3.6 到 Li

Linux下安装配置MongoDB 3.0版本数据库教程

说明: 操作系统:CentOS 5.X 64位 IP地址:192.168.21.128 实现目的: 安装配置MongoDB数据库 具体操作: 一.关闭SElinux.配置防火墙 1.vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq! #保存退出 setenforce 0 #使配置立即生效 2.vi /etc/sysconfig/iptables #编

linux下mysql5.7.17最新稳定版本安装教程

通过源码在linux上安装mysql最新稳定版本:mysql-5.7.17 为了方便安装过程中不受boost依赖的影响,直接从官网下载mysql-boost-5.7.17.tar.gz版本.(官方解释,编译过程中需要boost,但实际没有用到.) 安装目录: 启动脚本:/etc/init.d/mysqld 程序根目录:/usr/local/mysql 数据目录:/data/mysql 安装过程 1.安装依赖 #yum install -y cmake gcc-c++* make ncurses-

linux中yum update被占用怎么办

  使用yum安装计划任务功能,结果提示: 复制代码 代码如下: # yum -y install vixie-cron Loaded plugins: fastestmirror, refresh-packagekit, security Existing lock /var/run/yum.pid: another copy is running as pid 25960. Another app is currently holding the yum lock; waiting for

inputconsumer-/framework/base/core/java/android/view/目录下找不到InputConsumer.java

问题描述 /framework/base/core/java/android/view/目录下找不到InputConsumer.java 版本是Android4.3,在根目录下用命令find -name InputConsumer.java也找不到,请问这是怎么回事?

java-如何将Java程序与Linux版本的JRE打包并且在linux下能运行

问题描述 如何将Java程序与Linux版本的JRE打包并且在linux下能运行 在Windows下有很多方法来实现Java程序与JRE的打包发布.这样在目标机器上就不用预先安装JRE或者JDK了. 现在我需要在Linux下做同样的事情,有以下限制条件: 1.打包出来的程序要给多个地方用 2.目标操作系统上已经安装了其它版本的JDK或者JRE,但是不能确定其版本,而且也不能改动其版本(也就是不能装新的上去,或卸载原来的). 3.不能使用 InstallAnywhere 等第三方程序,只能是JRE

Linux 有问必答:如何在debian及其衍生发行版中改变默认的 Java 版本

Linux 有问必答:如何在debian及其衍生发行版中改变默认的 Java 版本 提问:当我尝试在Linux中运行一个Java程序时,我遇到了一个错误.看上去像程序编译所使用的Java版本与我本地的不同.我该如何在Linux上切换默认的Java版本? 当Java程序编译时,编译环境会设置一个"target"变量来设置程序可以运行的最低Java版本.如果你Linux系统上运行的程序不能满足最低的JRE版本要求,那么你会在运行的时候遇到下面的错误. Exception in thread