Linux系统安装JDK

一 前言

Linux系统版本是CentOS-7,安装JDK环境的方式有YUM源仓库安装、RPM包手动安装、和tar.gz压缩包手动安装这三种主流的方式;
Linux系统中安装JDK环境之前,先卸载掉CentOS-7默认安装的OpenJDK,确保环境纯净,再去安装项目需要的JDK版本;
检查Linux系统中JDK版本的命令:java -version

[root@MiWiFi-RD04-srv ~]# java -version openjdk version "1.8.0_412" OpenJDK Runtime Environment (build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)

检查Linux系统中RPM包安装的JDK,并卸载已安装的JDK相关包:

[root@MiWiFi-RD04-srv ~]# java -version openjdk version "1.8.0_412" OpenJDK Runtime Environment (build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode) [root@MiWiFi-RD04-srv ~]# rpm -qa | grep java python-javapackages-3.4.1-11.el7.noarch tzdata-java-2024a-1.el7.noarch java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 java-1.8.0-openjdk-headless-1.8.0.412.b08-1.el7_9.x86_64 java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 javapackages-tools-3.4.1-11.el7.noarch [root@MiWiFi-RD04-srv ~]# rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch [root@MiWiFi-RD04-srv ~]# rpm -e --nodeps tzdata-java-2024a-1.el7.noarch [root@MiWiFi-RD04-srv ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 [root@MiWiFi-RD04-srv ~]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.412.b08-1.el7_9.x86_64 [root@MiWiFi-RD04-srv ~]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 [root@MiWiFi-RD04-srv ~]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 [root@MiWiFi-RD04-srv ~]# rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch [root@MiWiFi-RD04-srv ~]# rpm -qa | grep java [root@MiWiFi-RD04-srv ~]# java -version -bash: /usr/bin/java: 没有那个文件或目录 [root@MiWiFi-RD04-srv ~]# 

上述步骤清理完成Linux系统中默认的OpenJDK,可以安装新的JDK环境

二 YUM源仓库安装

YUM(Yellowdog Updater, Modified)适合快速安装、无需自定义路径,系统自动管理依赖和环境变量;
在默认情况下,YUM仓库中提供的Java包是OpenJDK,而不是OracleJDK;

更新YUM软件包列表:

[root@MiWiFi-RD04-srv ~]# yum update -y 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile No packages marked for update

查找可用的JDK版本:

[root@MiWiFi-RD04-srv ~]# yum search java | grep jdk ldapjdk-javadoc.noarch : Javadoc for ldapjdk java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment java-1.7.0-openjdk-headless.x86_64 : The OpenJDK runtime environment without java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle java-1.8.0-openjdk.i686 : OpenJDK Runtime Environment 8 java-1.8.0-openjdk.x86_64 : OpenJDK 8 Runtime Environment java-1.8.0-openjdk-accessibility.i686 : OpenJDK accessibility connector java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector java-1.8.0-openjdk-demo.i686 : OpenJDK Demos 8 java-1.8.0-openjdk-demo.x86_64 : OpenJDK 8 Demos java-1.8.0-openjdk-devel.i686 : OpenJDK Development Environment 8 java-1.8.0-openjdk-devel.x86_64 : OpenJDK 8 Development Environment java-1.8.0-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless.x86_64 : OpenJDK 8 Headless Runtime Environment java-1.8.0-openjdk-javadoc.noarch : OpenJDK 8 API documentation java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK 8 API documentation compressed java-1.8.0-openjdk-src.i686 : OpenJDK Source Bundle 8 java-1.8.0-openjdk-src.x86_64 : OpenJDK 8 Source Bundle java-11-openjdk.i686 : OpenJDK Runtime Environment 11 java-11-openjdk.x86_64 : OpenJDK 11 Runtime Environment java-11-openjdk-demo.i686 : OpenJDK Demos 11 java-11-openjdk-demo.x86_64 : OpenJDK 11 Demos java-11-openjdk-devel.i686 : OpenJDK Development Environment 11 java-11-openjdk-devel.x86_64 : OpenJDK 11 Development Environment java-11-openjdk-headless.i686 : OpenJDK Headless Runtime Environment 11 java-11-openjdk-headless.x86_64 : OpenJDK 11 Headless Runtime Environment java-11-openjdk-javadoc.i686 : OpenJDK 11 API documentation java-11-openjdk-javadoc.x86_64 : OpenJDK 11 API documentation java-11-openjdk-javadoc-zip.i686 : OpenJDK 11 API documentation compressed in a java-11-openjdk-javadoc-zip.x86_64 : OpenJDK 11 API documentation compressed in java-11-openjdk-jmods.i686 : JMods for OpenJDK 11 java-11-openjdk-jmods.x86_64 : JMods for OpenJDK 11 java-11-openjdk-src.i686 : OpenJDK Source Bundle 11 java-11-openjdk-src.x86_64 : OpenJDK 11 Source Bundle java-11-openjdk-static-libs.i686 : OpenJDK libraries for static linking 11 java-11-openjdk-static-libs.x86_64 : OpenJDK 11 libraries for static linking ldapjdk.noarch : The Mozilla LDAP Java SDK [root@MiWiFi-RD04-srv ~]# 

选择java-1.8.0-openjdk-devel.x86_64版本进行安装:

[root@MiWiFi-RD04-srv ~]# java -version -bash: /usr/bin/java: 没有那个文件或目录 [root@MiWiFi-RD04-srv ~]# yum install -y java-1.8.0-openjdk-devel.x86_64 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 正在解决依赖关系 --> 正在检查事务 ---> 软件包 java-1.8.0-openjdk-devel.x86_64.1.1.8.0.412.b08-1.el7_9 将被 安装 已安装: java-1.8.0-openjdk-devel.x86_64 1:1.8.0.412.b08-1.el7_9 作为依赖被安装: java-1.8.0-openjdk.x86_64 1:1.8.0.412.b08-1.el7_9 java-1.8.0-openjdk-headless.x86_64 1:1.8.0.412.b08-1.el7_9 javapackages-tools.noarch 0:3.4.1-11.el7 python-javapackages.noarch 0:3.4.1-11.el7 tzdata-java.noarch 0:2024a-1.el7 完毕! [root@MiWiFi-RD04-srv ~]# java -version openjdk version "1.8.0_412" OpenJDK Runtime Environment (build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode) [root@MiWiFi-RD04-srv ~]# 

验证Java是否安装成功:

[root@MiWiFi-RD04-srv ~]# java -version openjdk version "1.8.0_412" OpenJDK Runtime Environment (build 1.8.0_412-b08) OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode) [root@MiWiFi-RD04-srv ~]# 

YUM安装JDK的默认路径:

[root@MiWiFi-RD04-srv ~]# ll /usr/lib/jvm 总用量 0 lrwxrwxrwx. 1 root root 26 1月 19 08:15 java -> /etc/alternatives/java_sdk lrwxrwxrwx. 1 root root 32 1月 19 08:15 java-1.8.0 -> /etc/alternatives/java_sdk_1.8.0 lrwxrwxrwx. 1 root root 40 1月 19 08:15 java-1.8.0-openjdk -> /etc/alternatives/java_sdk_1.8.0_openjdk drwxr-xr-x. 7 root root 135 1月 19 08:15 java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 lrwxrwxrwx. 1 root root 34 1月 19 08:15 java-openjdk -> /etc/alternatives/java_sdk_openjdk lrwxrwxrwx. 1 root root 21 1月 19 08:15 jre -> /etc/alternatives/jre lrwxrwxrwx. 1 root root 27 1月 19 08:15 jre-1.8.0 -> /etc/alternatives/jre_1.8.0 lrwxrwxrwx. 1 root root 35 1月 19 08:15 jre-1.8.0-openjdk -> /etc/alternatives/jre_1.8.0_openjdk lrwxrwxrwx. 1 root root 51 1月 19 08:15 jre-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 -> java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre lrwxrwxrwx. 1 root root 29 1月 19 08:15 jre-openjdk -> /etc/alternatives/jre_openjdk

查看已安装的JDK:

[root@MiWiFi-RD04-srv ~]# yum list installed | grep -i jdk copy-jdk-configs.noarch 3.3-11.el7_9 @updates java-1.8.0-openjdk.x86_64 1:1.8.0.412.b08-1.el7_9 @updates java-1.8.0-openjdk-devel.x86_64 1:1.8.0.412.b08-1.el7_9 @updates java-1.8.0-openjdk-headless.x86_64 1:1.8.0.412.b08-1.el7_9 @updates [root@MiWiFi-RD04-srv ~]# 

卸载已安装的JDK,可以逐个删除,也可以匹配多个删除:

[root@MiWiFi-RD04-srv ~]# yum remove -y java-1.8.0-openjdk.x86_64 [root@MiWiFi-RD04-srv ~]# yum remove -y java-1.8.0-openjdk* 

检查是否卸载完成:

[root@MiWiFi-RD04-srv ~]# yum list installed | grep -i jdk copy-jdk-configs.noarch 3.3-11.el7_9 @updates [root@MiWiFi-RD04-srv ~]# java -version -bash: /usr/bin/java: 没有那个文件或目录 [root@MiWiFi-RD04-srv ~]# ll /usr/lib/jvm 总用量 0 [root@MiWiFi-RD04-srv ~]# 

二 RPM包安装

如果需要安装OracleJDK,可以使用RPM包安装

2.1 官网下载RPM包

访问官网(https://www.oracle.com/),然后点击上方菜单栏第一个Products菜单,选择展开的Hardware and Software中的Java

然后选择Download Java

选择需要的jdk-8u481-linux-x64.rpm进行下载

在/usr/local/目录下创建java文件夹,将下载好的jdk-8u481-linux-x64.rpm上传至java文件夹

[root@MiWiFi-RD04-srv ~]# cd /usr/local/ [root@MiWiFi-RD04-srv local]# mkdir java [root@MiWiFi-RD04-srv local]# cd java [root@MiWiFi-RD04-srv java]# pwd /usr/local/java [root@MiWiFi-RD04-srv java]# ll 总用量 80948 -rw-r--r--. 1 root root 82890727 1月 19 09:24 jdk-8u481-linux-x64.rpm [root@MiWiFi-RD04-srv java]# 

2.2 安装RPM包

[root@MiWiFi-RD04-srv java]# rpm -ivh jdk-8u481-linux-x64.rpm 警告:jdk-8u481-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 8d8b756f: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:jdk-1.8-2000:1.8.0_481-10 ################################# [100%] [root@MiWiFi-RD04-srv java]# java -version java version "1.8.0_481" Java(TM) SE Runtime Environment (build 1.8.0_481-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.481-b10, mixed mode) [root@MiWiFi-RD04-srv java]# 

RPM方式的JDK默认安装目录/usr/java

[root@MiWiFi-RD04-srv java]# pwd /usr/java [root@MiWiFi-RD04-srv java]# ll 总用量 0 lrwxrwxrwx. 1 root root 16 1月 19 09:27 default -> /usr/java/latest lrwxrwxrwx. 1 root root 37 1月 19 09:27 jdk1.8.0-x64 -> /usr/lib/jvm/jdk-1.8.0_481-oracle-x64 lrwxrwxrwx. 1 root root 35 1月 19 09:27 jdk-1.8-oracle-x64 -> /etc/alternatives/java_jdk_8_oracle lrwxrwxrwx. 1 root root 37 1月 19 09:27 latest -> /usr/lib/jvm/jdk-1.8.0_481-oracle-x64

2.3 卸载RPM包

查看RPM方式的JDK安装包

[root@MiWiFi-RD04-srv java]# rpm -qa | grep -i jdk jdk-1.8-1.8.0_481-10.x86_64

卸载RPM方式的JDK安装包

[root@MiWiFi-RD04-srv java]# rpm -e --nodeps jdk-1.8-1.8.0_481-10.x86_64 [root@MiWiFi-RD04-srv java]# pwd /usr/java [root@MiWiFi-RD04-srv java]# ll 总用量 0 [root@MiWiFi-RD04-srv java]# java -version -bash: /usr/bin/java: 没有那个文件或目录 [root@MiWiFi-RD04-srv java]# 

三 压缩包安装

3.1 安装JDK

在Oracle官网下载jdk-8u481-linux-x64.tar.gz压缩包

将下载好的jdk-8u481-linux-x64.tar.gz压缩包放在/usr/local/java/目录下

[root@MiWiFi-RD04-srv java]# cd /usr/local/java/ [root@MiWiFi-RD04-srv java]# pwd /usr/local/java [root@MiWiFi-RD04-srv java]# ll 总用量 158588 -rw-r--r--. 1 root root 82890727 1月 19 09:24 jdk-8u481-linux-x64.rpm -rw-r--r--. 1 root root 79501187 1月 19 09:46 jdk-8u481-linux-x64.tar.gz [root@MiWiFi-RD04-srv java]# 

解压jdk-8u481-linux-x64.tar.gz压缩包

[root@MiWiFi-RD04-srv java]# ll 总用量 158588 -rw-r--r--. 1 root root 82890727 1月 19 09:24 jdk-8u481-linux-x64.rpm -rw-r--r--. 1 root root 79501187 1月 19 09:46 jdk-8u481-linux-x64.tar.gz [root@MiWiFi-RD04-srv java]# tar -zxvf jdk-8u481-linux-x64.tar.gz [root@MiWiFi-RD04-srv java]# ll 总用量 158588 drwxr-xr-x. 8 root root 213 1月 19 09:49 jdk1.8.0_481 -rw-r--r--. 1 root root 82890727 1月 19 09:24 jdk-8u481-linux-x64.rpm -rw-r--r--. 1 root root 79501187 1月 19 09:46 jdk-8u481-linux-x64.tar.gz [root@MiWiFi-RD04-srv java]# 

在/etc/profile文件中配置环境变量

export JAVA_HOME=/usr/local/java/jdk1.8.0_481 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin

刷新配置文件

[root@MiWiFi-RD04-srv jdk1.8.0_481]# source /etc/profile

验证JDK是否安装完成

[root@MiWiFi-RD04-srv jdk1.8.0_481]# java -version java version "1.8.0_481" Java(TM) SE Runtime Environment (build 1.8.0_481-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.481-b10, mixed mode)

3.2 卸载JDK

删除JDK安装目录:

[root@MiWiFi-RD04-srv java]# cd /usr/local/java/ [root@MiWiFi-RD04-srv java]# pwd /usr/local/java [root@MiWiFi-RD04-srv java]# ll 总用量 158588 drwxr-xr-x. 8 root root 213 1月 19 09:49 jdk1.8.0_481 -rw-r--r--. 1 root root 82890727 1月 19 09:24 jdk-8u481-linux-x64.rpm -rw-r--r--. 1 root root 79501187 1月 19 09:46 jdk-8u481-linux-x64.tar.gz [root@MiWiFi-RD04-srv java]# rm -rf /usr/local/java/jdk1.8.0_481 [root@MiWiFi-RD04-srv java]# ll 总用量 158588 -rw-r--r--. 1 root root 82890727 1月 19 09:24 jdk-8u481-linux-x64.rpm -rw-r--r--. 1 root root 79501187 1月 19 09:46 jdk-8u481-linux-x64.tar.gz [root@MiWiFi-RD04-srv java]# 

删除配置文件中JDK相关环境变量配置:

刷新配置文件

[root@MiWiFi-RD04-srv java]# source /etc/profile

验证卸载是否完成

[root@MiWiFi-RD04-srv java]# java -version bash: java: 未找到命令...

三种安装和卸载JDK的方式,YUM源方式安装最为便捷,自动配置环境,但安装的是OpenJDK,不是OracleJDK,RPM包方式安装可以选择合适的OracleJDK版本进行安装,安装也很方便,压缩包安装最为灵活,而且支持多版本共存,需要手动配置环境变量。

Read more

面试官最爱问:C++ 多态底层到底是怎么实现的?

面试官最爱问:C++ 多态底层到底是怎么实现的?

欢迎来到 s a y − f a l l 的文章 欢迎来到say-fall的文章 欢迎来到say−fall的文章 🌈say-fall:个人主页🚀专栏:《手把手教你学会C++》 | 《C语言从零开始到精通》 | 《数据结构与算法》 | 《小游戏与项目》💪格言:做好你自己,才能吸引更多人,与他们共赢,这才是最好的成长方式。 前言: 关于上一篇文章的多态原理他来啦! 在上一篇《多态核心:虚函数、override、final、纯虚函数总结》中,我们已经初步认识了 C++ 多态的语法层面:虚函数、重写、纯虚函数等关键知识点,并提到了多态的底层依赖于 vptr 虚指针 与 vtable 虚函数表。但很多同学在学习时,仍然会有这些疑问: * 为什么带虚函数的类,sizeof 大小会多出

By Ne0inhk
改造红黑树实现封装 map/set:感受C++ 标准容器的精妙设计与底层实现

改造红黑树实现封装 map/set:感受C++ 标准容器的精妙设计与底层实现

容器map/set的底层是红黑树,这一篇详解红黑树如何封装实现map/set。 1.map/set设计的巧妙之处 map是key/value类型,set是key类型,两个冲突的参数类型,是如何由红黑树封装而成? 暴力思路:两个红黑树,一个kv,一个k。可是这样代码复用率极低,维护成本高。 源码思路:利用 键提取器——仿函数 提取kv、k的key,用一颗红黑树实现map,set C语言一般用函数指针,但是它十分麻烦,C++有了仿函数就很方便 接下来在红黑树基础上封装map和set 2.map和set的实现 2.1map和set的基本框架 + 原红黑树结构变化 map是key、value结构,set是key结构:  既然我们要用一个红黑树封装实现map和set,那传的参数就得通用: 原本是K,V结构,现在,要改成通用的,就用T吧 T根据需要,可选择传pair<K,

By Ne0inhk
C++并集查找

C++并集查找

前言 C++图论 C++算法与数据结构 本博文代码打包下载 基本概念 并查集(Union-Find)是一种用于处理动态连通性(直接或间接相连)的数据结构,主要支持两种操作:union 和 find。通过这两个基本操作,可以高效地管理一组元素之间的连通关系。 Find: 查找节点所在有向树的根。 Union: 将两个不同的有向图合并为一棵树。 暴力做法 并集查找处理无向图的数据结构:有向森林,每棵树都是内向树。连通子图都直接或间接指向根,根出度为0,其它节点出度为1。vPar记录各节点的父节点。 Find(u)函数寻找u所在有向树的根(最远祖先): while(-1!= vPar[u]){ u =vPar}return u; 判断u和v是否连通: returnFind(u)==Find(v) 连通: root1 =Find(

By Ne0inhk