安装和切换多版本java (linux篇)
前言
一、JDK是什么?
1、JDK : Java Development ToolKit(Java开发工具包)。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
最主流的JDK是Oracle公司发布的JDK,除了Oracle之外,还有很多公司和组织都开发了属于自己的JDK,例如国外IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求,比如IBM的JDK据说运行效率就比Oralce的JDK高的多。但不管怎么说,我们还是需要先把基础的Oracle JDK掌握好。
2、JDK是java开发工具包,在其安装目录下面有五个文件夹、一些描述文件、一个src压缩文件。bin、lib、 jre这四个文件夹起作用。可以看出来JDK包含JRE,而JRE包含JVM。
·bin:最主要的是编译器(javac.exe)
·lib:类库(开发中需要使用到的一些jdk提供的一些类)
·jre:java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)
· 总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
3、JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
二、jdk和jre的区别?
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
一句话: jre就是Java程序运行的环境。
Linux
1.包管理安装
1.1centos7
随意使用一条命令便可以查询到java的安装信息
1 | root@centos:~#yum list installed | grep java |
出现内容,表明你系统已经安装了java,如果安装的版本不适合将要搭建的服务环境,你就需要卸载掉。
1 | root@centos:~#yum -y remove java-11-openjdk* #卸载所有java-11-openjdk |
查看所有JDK版本
1 | root@centos:~#yum search java | grep jdk |
选择版本并安装(这里我安装的是java8)
1 | root@centos:~#yum install -y java-1.8.0-openjdk* |
检查jdk是否安装成功
1 | root@ubuntu:~#java --version |
注意这里是–version
1.2ubuntu
查询已安装java的信息
1 | root@ubuntu:~#java -version |
注意这里是-version
先卸载之前的版本
1 | #之前安装过jdk11 |
查看所有JDK版本
1 | root@ubuntu:~#apt search openjdk |
选择版本并安装(这里我安装的是java8)
1 | root@ubuntu:~#apt install -y openjdk-8-jdk |
检查jdk是否安装成功
1 | root@ubuntu:~#java -version |
2.源码包安装
这里就和windows安装java差不多了,linux是下载压缩包后,解压完添加环境变量即可使用
winget给出了所有jdk的最新版本列表,winget查找JDK的网址==> whichjdk
1 | winget search OpenJDK |
从oracle官网下载Java压缩包
Java8:Java SE Development Kit 8 Downloads
![image-20230404181515372](安装和切换多版本java (linux篇)/image-20230404181515372.png)
注册登录后即可获得下载链接,这里注意自己的系统是arm64还是amd64
我arm64架构的系统试过安装多个这种版本的openjdk,会报错,所以我重新选择了oracle的jdk
1 | root@ubuntu:~#wget https://cdn.azul.com/zulu/bin/zulu8.66.0.15-ca-jdk8.0.352-linux_x64.tar.gz |
2.1创建一个存放源码包的目录并解压
1 | root@ubuntu:~#mkdir /usr/local/JDK |
3.配置环境
3.1添加环境变量的两种方法:
适用于centos,ubuntu
1)vim /etc/profile
- 推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,缺点是可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell;
1 | vim /etc/profile |
2)vi ~/.bashrc
修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果需要给某个用户权限
使用这些环境变量,只需要修改其个人用户主目录下的.bashrc文件就可以了。
1 | vi ~/.bashrc |
3.2添加java环境变量
我用的是vi ~/.bashrc
1 | root@ubuntu:~#vim ~/.bashrc |
4.切换java版本
用包管理安装可能不是很全,没有自己需要的java版本,管理也不方便,所以一般都是用源码包方式来安装的多个版本的java
不管理只使用的话也可以直接用包管理安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24root@Debian:~# apt search openjdk
#比如我安装11和17
root@Debian:~# apt install openjdk-11-jdk -y && apt install openjdk-17-jdk -y
root@Debian:~# which java
/usr/bin/java
root@Debian:~# ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 May 17 17:27 /usr/bin/java -> /etc/alternatives/java
root@Debian:~# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 43 May 17 17:27 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java
#用apt安装的不需要用update-alternatives --install 来添加链接,因为它自己会自动添加的
root@Debian:~# update-alternatives --display java
java - auto mode
link best version is /usr/lib/jvm/java-17-openjdk-amd64/bin/java
link currently points to /usr/lib/jvm/java-17-openjdk-amd64/bin/java
link java is /usr/bin/java
slave java.1.gz is /usr/share/man/man1/java.1.gz
/usr/lib/jvm/java-11-openjdk-amd64/bin/java - priority 1111
slave java.1.gz: /usr/lib/jvm/java-11-openjdk-amd64/man/man1/java.1.gz
/usr/lib/jvm/java-17-openjdk-amd64/bin/java - priority 1711
slave java.1.gz: /usr/lib/jvm/java-17-openjdk-amd64/man/man1/java.1.gz
#切换java
root@Debian:~# update-alternatives --config java
alternatives命令介绍
当我们频繁使用java的不同版本,不可能采用卸载java后在重新安装需要用的java的版本的方法,这时我们可以用到alternatives命令。
alternatives是Linux下的一个功能强大的命令。只能在root权限下执行。如系统中有几个命令功能十分类似,却又不能随意删除,那么可以用 alternatives 来指定一个全局的设置。
alternatives常用于同一个系统中安装同一软件的多个版本。比如为了开发需要,我需要安装JDK16,同时还需要JDK8,我怎么样才能忽略安装路径,按照我自己的意思,使用我想要的java版本呢?
命令格式:
update-alternatives [options] command
1 | update-alternatives |
4.1使用方法
通过以下指令来看我们安装了多少openJDK
我的用到ubuntu,centos命令则把apt改为yum
1 | root@ubuntu:~#apt list installed | grep jdk |
在这里我又下载了一个jdk17,解压放到了/usr/local/JDK/目录下
先修改添加的java环境变量,修改为
1 | #在这里添加你想切换的jdk版本,例如我在8和17之间切换,如需更多版本则将路径添加到JAVA_HOME中(冒号添加路径) |
使配置生效
1 | root@ubuntu:~# source ~/.bashrc |
然后用update-alternatives –install 命令
1 | root@ubuntu:~#update-alternatives --install /usr/bin/java java /usr/local/JDK/jdk8/bin/java 8 |
–install 选项
使用语法:
update-alternatives –install link name path priority [–slave link name path]…
其中link为系统中功能相同软件的 公共链接目录,比如/usr/bin/java(需绝对目录);name为命令链接符名称,如java;
path为你所要使用新命令、新软件的所在目录;
priority为优先级, 当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;
–slave为从alternative。
alternative有两种模式:auto和manual,默认都为auto模式,因为大多数情况下update-alternatives命令都被postinst (configure) or prerm (install)调用的,如果将其更改成手动的话安装脚本将不会更新它了。
切换java版本命令
1 | root@ubuntu:~# update-alternatives --config java #java是我设置的链接符名称 |
5.切换其它的环境(例如python)
其实切换其它的依赖环境也是可以的,例如debian内置python2和python3,我的默认使用python2,然后切换成python3
1 | root@orangepi5:~# whereis python2 |
6.centos7中安装python3后使用yum命令报错解决办法
1 | vi /usr/bin/yum |
把第一行#! /usr/bin/python
后面的python
改成 python2
保存退出
1 | vi /usr/libexec/urlgrabber-ext-down |
同样把第一行#! /usr/bin/python
后面的python
改成 python2
保存退出