安装了Ubuntu18.04系统,由于要编译不同的android源码,所以需要不同的JDK版本,一共装了四个JDK版本,分别是openjdk-11、openjdk-8、openjdk-7、oracle jdk1.8,想用哪个jdk版本就切换哪个jdk,如果还想要JDK 10,那就参考Ubuntu系统中Java环境JDK 10的安装、配置、测试一文。如果你也有多个版本的JDK需求,那就跟我一起来吧。

先声明为什么要这么多的JDK版本

因为要在Ubuntu18.04系统中编译android源码,所以安装了openJDK-7 (用于编译Android6.0以下版本的源码)、openJDK-8(用于编译Android6.0以上版本的源码)、日常开发中AS用的是Oracle 的java1.8,另外还安装了Ubuntu18.04的默认jdk版本openJDK-11,这样就有了四个JDK版本,在不同的使用情景下需要来回切换,用来切换jdk版本的命令是update-alternatives。

一、安装openjdk-11

执行命令:

sudo apt install openjdk-11-jdk

因为Ubuntu18.04的默认JDK就是openJDK-11,所以也可以执行命令:

sudo apt install default-jdk

linux 下多版本Java linux可以安装多个jdk吗_linux java 多版本

二、安装openjdk-8

执行命令:

sudo apt install openjdk-8-jdk

linux 下多版本Java linux可以安装多个jdk吗_linux 下多版本Java_02

三、安装openjdk-7

据说Ubuntu18.04已经去除了openJdk-7的源,所以本次进行了下载后手动安装:

下载以上安装包,然后执行命令:

sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config*

如果在安装过程中报错,则执行以下命令:

sudo apt --fix-broken install

下面看一下openJDK-7的安装路径,执行一下命令:

dpkg -L openjdk-7-jdk

linux 下多版本Java linux可以安装多个jdk吗_linux java 多版本_03

我们看到openJdk-7的安装路径是/usr/lib/jvm,进入该目录下查看该目录中的内容:

cd /usr/lib/jvm/ ; ls -al

linux 下多版本Java linux可以安装多个jdk吗_linux 下多版本Java_04

注意看红色箭头指向的三个文件夹,分别是上面安装的openjdk-11、openjdk-8、openjdk-7的安装路径,知道了这三个版本jdk的安装路径。

四、安装oracle版jdk1.8

为了统一管理和方便查找,我们把oracle1.8的jdk也安装到该目录下,打开oracle-jdk下载官网:

linux 下多版本Java linux可以安装多个jdk吗_linux java 多版本_05

下载相应的jdk版本,我的系统是64位的,所以下载的是Linux x64的。将下载的安装包移动到/usr/lib/jvm/目录下,然后解压:

sudo tar -zxvf jdk-8u181-linux-x64.tar.gz

解压后多出来的目录就是oracle版本的jdk安装目录

linux 下多版本Java linux可以安装多个jdk吗_java_06

由于是多版本jdk使用所以这里就没必要配置环境变量了。

切换jdk版本

我们执行java -version,这时看到显示的版本是openJdk-11:

linux 下多版本Java linux可以安装多个jdk吗_linux java 多版本_07

那我们就要思考一下了,刚刚明明装了好几个版本的jdk,为什么现在获取的是11,不是7或者8呢。那就找一下,java命令是怎么设置的,最终在/usr/bin路径下找到java命令:

linux 下多版本Java linux可以安装多个jdk吗_oracle_08

我们看,这个文件不是一个普通的文件,而是一个链接,指向的是/etc/alternatives/路径下的java 文件,再查看/etc/alternatives/java文件,发现也是个链接:

linux 下多版本Java linux可以安装多个jdk吗_linux java 多版本_09

在看该链接的指向,是不是有点熟悉了,对,就是我们上面提到的jdk的安装目录下的可执行文件。终于找到真正的主角了。到这里我们就明白了,原来是靠着链接文件来指向某一个版本的可执行文件来实现多版本配置的。那我们应该怎么改变这个指向呢,这就要用到update-alternatives命令了。关于该命令的详细用法请自行google、baidu。执行切换版本命令:

sudo update-alternatives --config java

linux 下多版本Java linux可以安装多个jdk吗_linux 下多版本Java_10

我们看到列出的可配置项中只有openjdk相关候选项,没有oracle版本jdk的候选项。是因为Openjdk都是系统安装的,已经自动添加到可配置列表中,而oracle的jdk是手动解压到本地的,需要我们手动添加,那怎么将其增加到可选配置列表中呢,

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_181/bin/java 300

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_181/bin/javac 300

注意把jdk1.8.0_181换成你自己的文件夹。

然后再次执行 sudo update-alternatives --config java

linux 下多版本Java linux可以安装多个jdk吗_多版本_11

这回发现可选列表用已经有了oracle版本的jdkle ,然后根据提示输入对应的编号,然后回车确认。

然后在执行:

java -version

linux 下多版本Java linux可以安装多个jdk吗_linux java 多版本_12

已然切换到oracle版本的jdk。

相关主题