在Linux上轻松安装Java JDK

1,411 阅读13分钟

一:Java 软件包下载

(一):常用JDK版本说明

  随着 Oracle JDK 的收费政策的实施,市场上涌现了许多开源和商业替代品,例如 Zulu JDK、GraalVM JDK 和 AdoptOpenJDK等等。这些替代品不仅为开发者提供了更灵活的选择,还在稳定性和性能上不断进行优化。
  本文只针对 Oracle JDK、Open JDK、Zulu JDK 的下载说明。

点开查看详情:一些常见JDK版本区别
##################################### Oracle JDK(收费) #####################################
    Oracle JDK是由Oracle Corporation提供的Java开发工具包(JDK),是Java平台的官方实现。
    它包含了Java Runtime Environment (JRE)、编译器、调试器和其他开发工具。
    特点
        - 收费模式:从JDK11开始,Oracle JDK采用了商业许可模式,企业用户需要为使用Oracle JDK付费。
                注:个人或个人开发者可以免费使用。
        - 长期支持(LTS):Oracle JDK提供长期支持版本,这些版本会定期发布安全更新和错误修复。
        - 性能优化:Oracle JDK在性能和稳定性方面经过了广泛的测试和优化,适合企业级应用。
        - 工具集成:与Oracle的其他产品(如 Oracle Database)有良好的集成。
    适用场景
        - 企业级应用开发,尤其是需要长期支持和稳定性的项目。
        - 需要使用 Oracle 特有的工具和服务的开发环境。
 
######################################## GraalVM JDK ########################################
    GraalVM是由Oracle开发的,而Oracle对GraalVM进行支持和维护,同时也提供商业支持和企业版选项。
    GraalVM是一个高性能的多语言虚拟机,支持Java、JavaScript、Python、Ruby和其他语言。
    GraalVM JDK是GraalVM的Java版本,提供了与标准JDK兼容的功能。
    GraalVM特点:
        - 多语言支持:支持多种编程语言,可以在同一应用中混合使用不同语言。
        - 原生镜像:可以将 Java 应用编译为原生可执行文件,启动速度快,内存占用低,适合微服务架构。
        - 性能优化:提供了先进的优化技术,如即时编译(JIT)和提前编译(AOT),可以显著提高应用性能。
        - 工具集成:提供了丰富的工具,如调试器、分析器和性能监控工具。
    适用场景
        - 需要多语言支持的项目,尤其是需要将Java与其他语言结合使用的场景。
        - 微服务架构,特别是需要快速启动和低内存占用的应用。
 
########################################## Open JDK ##########################################
    Open JDK是Java平台的官方开源实现,遵循GNU通用公共许可证(GPL),允许用户自由使用、修改和分发。
    特点:
        - 开源:OpenJDK是完全开源的,遵循GPL许可协议,允许开发者自由使用和修改源代码。
        - 社区支持:OpenJDK拥有一个活跃的开发社区,开发者可以参与到项目中,报告问题、提交补丁和贡献代码。
        - 长期支持(LTS):OpenJDK提供长期支持版本,这些版本会定期发布安全更新和错误修复
    适用场景
        - 开源项目:适合需要开源解决方案的开发者和企业,尤其是那些希望避免商业许可的用户。
        - 教育和学习:由于其开源特性,OpenJDK 是学习 Java 编程和开发的理想选择。
        - 企业应用:适合需要稳定和长期支持的企业级应用,尤其是那些希望使用开源技术栈的公司。
 
########################################### Zulu JDK ##########################################
    Zulu JDK是由Azul Systems提供的开源Java开发工具包,基于OpenJDK。
    它是一个完全兼容的JDK实现,支持多种平台和操作系统。
    特点
        - 开源:Zulu JDK 是完全开源的,遵循 GPL 许可协议,适合需要开源解决方案的用户。
        - 多平台支持:支持 Windows、Linux 和 macOS 等多种操作系统,适合跨平台开发。
        - 长期支持(LTS):Azul 提供对 Zulu JDK 的长期支持,定期发布安全更新和错误修复。
        - 灵活的许可:用户可以选择社区版(免费)或企业版(收费),企业版提供额外的支持和服务。
    适用场景
        - 需要开源解决方案的企业和开发者。
        - 跨平台应用开发,尤其是需要在不同操作系统上运行的项目。
        - 需要长期支持和稳定性的项目,但不希望使用商业许可的用户。

(二):常用JDK版本下载

  说明:x86、x64指的是PC端,CPU采用x86的架构,内部使用的是复杂指令集(CISC),一般我们使用的桌面电脑、笔记本和服务器都是这种架构。ARM指的是移动端,CPU采用ARM的架构,内部使用的是精简指令集(RISC),一般我们使用的智能手机、平板、物联网设备都是采用这种架构。
注:关于本篇文章主要以OracleJDK21版本安装为示例!!\color{#f00}{注:关于本篇文章主要以Oracle JDK21版本安装为示例!!}

关于Oracle JDK下载地址(收费、但个人使用免费)
   Oracle JDK(当前最新)Oracle JDK 21(LTS)
  Oracle JDK 17(LTS)Oracle JDK 11(LTS)
  Oracle JDK 8(LTS)
image.png

关于Open JDK下载地址(推荐、免费)
   Open JDK 21(LTS)Open JDK 17(LTS)
  Open JDK 11(LTS)Open JDK 8(LTS)
image.png

关于Zulu JDK下载地址(推荐、免费)
  Zulu JDK下载地址
  这没啥说的,极其方便,要啥版本选择对应版本就行,各类Linux和Windows都可以找到; image.png

二:手动解压安装JDK环境

  通过前面我们下载好对应的tar.gz类型JDK安装包,这种类型的压缩包正常来说在DebianUbuntuCentosRedHat上面的安装操作方式都是一样的。
  如果之前已经使用此方式安装过了,只需要删除指定的解压目录和删除环境变量即可。

(一):下载JDK并解压缩

'Ⅰ:去官网下载对应的JDK压缩包,下面这是三种不同类型的JDK 21:'
    jdk-21_linux-x64_bin.tar.gz(Oracle JDK)
    openjdk-21+35_linux-x64_bin.tar.gz(Open JDK)
    zulu21.38.21-ca-jdk21.0.5-linux_x64.tar.gz(Zulu JDK)

'Ⅱ:上传到对应的目录中并解压(随便选一种JDK即可)'
    ## 执行上传命令(或者通过ftp自己上传)
        rz -y
    ## 解压tar.gz压缩包
        sudo tar -zxvf jdk-21_linux-x64_bin.tar.gz
    ## 剪贴到/usr/local目录下
        '注:此目录通常是编译或安装不是直接来自官方仓库或软件包管理器的软件包'
        sudo mkdir -p /usr/local/java/
        sudo mv jdk-21.0.5/ /usr/local/java/
    ## 下面就需要配置环境变量了

(二):配置JDK环境变量

  安装到这已经就是最后一步了,我们需要配置所需的的Java环境变量,让其系统更好的找到如java、javac等命令的位置;
  注:一般使用下面两章介绍的dpkgaptrpmyum方式安装的不需要配置环境变量,但是若识别不到还是老老实实配置环境变量。

'Ⅰ:手动配置Java环境变量让系统知道我们Java解压哪个目录中'
    '下面两种环境配置文件修改其中一种即可(适合自己的系统即可)'
    ## 系统级配置文件(影响所有用户的环境变量和启动配置)
        sudo vim /etc/profile
    ## 用户级配置文件(影响当前用户的Bash shell环境配置)
        sudo vim ~/.bashrc

'Ⅱ:将如下配置放到我们修改的配置文件里最后一行'
    export JAVA_HOME=/usr/local/java/jdk-21.0.5    # 这里设置解压的Java目录文件
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

'Ⅲ:让修改的配置立即生效(生效对应你修改的配置文件)'
    source /etc/profile
    source ~/.bashrc

三:Debian派系关于JDK环境安装

  说到这个派系,那指定就离不开 UbuntuDebian 了,下面是在这两个系统上安装对应的JDK环境,并且以两种方式(dpkgapt)来进行一个JDK环境的安装。
  虽然如下两种安装方式会自动配置环境变量,但有时仍需要手动配置,以确保 Java 工具(如 javajavac)可以在命令行中正确使用。具体参考第二章里的环境配置。

(一):dpkg安装JDK环境

使用付费的(个人免费)OracleJDK安装:\color{#f00}{使用付费的(个人免费)Oracle JDK安装:}

'不管是 Ubuntu 还是 Debian 都是按照如下内容操作'
'================= 使用deb包在 Ubuntu 24(LTS)或 Debian 12 安装 Oracle JDK(付费) ================='
'Ⅰ:去官方下载对应的Deb包(这里以JDK21来说)'
    在线地址下载:wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb
    下载好的JDK包:jdk-21_linux-x64_bin.deb
    
'Ⅱ:执行安装(注:dpkg -i 安装命令)'
    sudo dpkg -i jdk-21_linux-x64_bin.deb
    
'Ⅳ:检查Java环境是否成功安装'
    获取java版本号
        java -version
            # java version "21.0.5" 2024-10-15 LTS
            # Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239)
            # Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)
    查看JDK的安装路径(安装后才有)
        which java
            # /usr/bin/java

使用免费的ZuluJDK安装(Ubuntu24LTS)):\color{#f00}{使用免费的Zulu JDK安装(Ubuntu 24(LTS)):}

'Ⅰ:准备好需要安装的deb安装包(这里以JDK8来说)'
   下载的deb包:zulu8.82.0.21-ca-jdk8.0.432-linux_amd64.deb

'Ⅱ:解决依赖问题(安装时肯定会出现依赖问题的,大家可以按照缺的依赖自己下载)'
    Ubuntu缺啥依赖包去这里面找:https://pkgs.org/
    关于Ubuntu 24(LTS)缺少的依赖处理   
    在线下载(批量执行):
        wget http://archive.ubuntu.com/ubuntu/pool/main/x/xorg/x11-common_7.7+23ubuntu3_all.deb
        wget http://archive.ubuntu.com/ubuntu/pool/main/j/java-common/java-common_0.75+exp1_all.deb
        wget http://archive.ubuntu.com/ubuntu/pool/main/libx/libxrender/libxrender1_0.9.10-1.1build1_amd64.deb
        wget http://archive.ubuntu.com/ubuntu/pool/main/a/alsa-lib/libasound2-data_1.2.11-1build2_all.deb
        wget http://archive.ubuntu.com/ubuntu/pool/main/a/alsa-lib/libasound2t64_1.2.11-1build2_amd64.deb
        wget http://archive.ubuntu.com/ubuntu/pool/main/libx/libxi/libxi6_1.8.1-1build1_amd64.deb
        wget http://archive.ubuntu.com/ubuntu/pool/main/libx/libxtst/libxtst6_1.2.3-1.1build1_amd64.deb
    安装:
        sudo dpkg -i libasound2-data_1.2.11-1build2_all.deb
        sudo dpkg -i libasound2t64_1.2.11-1build2_amd64.deb
        sudo dpkg -i x11-common_7.7+23ubuntu3_all.deb
        sudo dpkg -i libxi6_1.8.1-1build1_amd64.deb
        sudo dpkg -i libxtst6_1.2.3-1.1build1_amd64.deb
        sudo dpkg -i libxrender1_0.9.10-1.1build1_amd64.deb
        sudo dpkg -i java-common_0.75+exp1_all.deb   

'Ⅲ:执行安装(注:dpkg -i 安装命令)'
    sudo dpkg -i zulu8.82.0.21-ca-jdk8.0.432-linux_amd64.deb

使用免费的ZuluJDK安装(Debain12):\color{#f00}{使用免费的Zulu JDK安装(Debain 12):}

'Ⅰ:准备好需要安装的deb安装包(这里以JDK8来说)'
    下载的deb包:zulu8.82.0.21-ca-jdk8.0.432-linux_amd64.deb

'Ⅱ:解决依赖问题(安装时肯定会出现依赖问题的,大家可以按照缺的依赖自己下载)'
    Debian缺啥依赖包去这里面找:https://pkgs.org/
    关于 Debian 12 缺少的依赖处理
    在线下载(批量执行):
        wget http://ftp.de.debian.org/debian/pool/main/j/java-common/java-common_0.74_all.deb
        wget http://ftp.de.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.2.8-1+b1_amd64.deb
        wget http://ftp.de.debian.org/debian/pool/main/libx/libxi/libxi6_1.8-1+b1_amd64.deb
        wget http://ftp.de.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1.1_amd64.deb
        wget http://ftp.de.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1.1_amd64.deb
        wget http://ftp.de.debian.org/debian/pool/main/a/alsa-lib/libasound2-data_1.2.8-1_all.deb
        wget http://ftp.de.debian.org/debian/pool/main/x/xorg/x11-common_7.7+23_all.deb
    安装:
        sudo dpkg -i libasound2-data_1.2.8-1_all.deb
        sudo dpkg -i libasound2_1.2.8-1+b1_amd64.deb
        sudo dpkg -i libxi6_1.8-1+b1_amd64.deb
        sudo dpkg -i x11-common_7.7+23_all.deb
        sudo dpkg -i libxtst6_1.2.3-1.1_amd64.deb
        sudo dpkg -i libxrender1_0.9.10-1.1_amd64.deb
        sudo dpkg -i java-common_0.74_all.deb

'Ⅲ:执行安装(注:dpkg -i 安装命令)'
    sudo dpkg -i zulu8.82.0.21-ca-jdk8.0.432-linux_amd64.deb

(二):apt安装JDK环境

## 查询有关于JDK方面的信息
    sudo apt-cache search jdk
## 获取详细的包装信息
    sudo apt-cache show openjdk-17-jdk

'下列操作Ubuntu和Debian都是相同的操作'
'Ⅰ:更新仓库(必须)并获取远程的JDK信息'
     sudo apt-get update
     sudo apt-cache search jdk
     注意:以-分割的后面是介绍,前面是包名称(包名称包括有如:文档、jdk、jre等等)
     打印:
        # ...
        # openjdk-17-dbg - Java runtime based on OpenJDK (debugging symbols)
        # openjdk-17-demo - Java runtime based on OpenJDK (demos and examples)
        # openjdk-17-doc - OpenJDK Development Kit (JDK) documentation
        # openjdk-17-jdk - OpenJDK Development Kit (JDK)
        # openjdk-17-jdk-headless - OpenJDK Development Kit (JDK) (headless)
        # openjdk-17-jre - OpenJDK Java runtime, using Hotspot JIT
        # openjdk-17-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
        # openjdk-17-jre-zero - Alternative JVM for OpenJDK, using Zero
        # openjdk-17-source - OpenJDK Development Kit (JDK) source files
        # libpracticalxml-java - practical XML handling routines
     补充:
        openjdk-17-dbg: 包含调试符号的 Java 运行时,用于调试 Java 应用程序。
        openjdk-17-demo: 包含示例和演示的 Java 运行时,通常用于展示 Java 特性的示例。
        openjdk-17-doc: OpenJDK 开发工具包 (JDK) 的文档,提供开发人员所需的参考资料。
        openjdk-17-jdk: OpenJDK 开发工具包,包含开发 Java 应用程序所需的所有工具和库。
        openjdk-17-jdk-headless: 不包含图形界面的 OpenJDK 开发工具包,适合在服务器环境中使用。
        openjdk-17-jre: 使用 Hotspot JIT 编译器的 OpenJDK Java 运行时,允许运行 Java 应用程序。
        openjdk-17-jre-headless: 不包含图形界面的 OpenJDK Java 运行时,适合服务器环境。
        openjdk-17-jre-zero: 使用 Zero 虚拟机的替代 JVM,通常用于某些特定的环境。
        openjdk-17-source: OpenJDK 开发工具包的源代码,供开发人员查看或修改。

'Ⅱ:安装对应的JDK环境'
    sudo apt install openjdk-8-jre-headless

'Ⅲ:检查Java环境是否成功安装'
    ## 获取java版本号
        java -version
    ## 查看JDK的安装路径(安装后才有)
        which java

(三):卸载安装的JDK环境

'卸载以dpkg或者apt方式安装的JDK'
    Ⅰ:dpkg查询java安装包名称(注:dpkg --get-selections 列举出所有deb安装的包)
        ## 执行查询命令
            dpkg --get-selections | grep "java\|jdk\|gcj\|jre\|zulu"
            假如打印如下:
                jdk-21          install
    Ⅱ:卸载查询出来的所有安装包名称(注:apt-get remove 是deb包的卸载命令)
        ## 执行卸载命令(查询出来什么就卸载什么,查询出多个就以空格隔开,如:jdk-21 xxx xxx)
            sudo apt-get remove --purge jdk-21

三:RedHat派系关于JDK环境安装

  说到这个派系,那指定就离不开 CentosRedHat 了,下面也是在这两个系统上安装对应的JDK环境,并且以三种方式(rpmyum)来进行一个JDK环境的安装。
  虽然如下两种安装方式会自动配置环境变量,但有时仍需要手动配置,以确保 Java 工具(如 javajavac)可以在命令行中正确使用。具体参考第二章里的环境配置。

(一):rpm安装JDK环境

'================== 通过 Centos7 的 RPM 包方式安装 Oracle JDK(付费) =================='
    Ⅰ:准备好需要安装的rpm安装包
        这里我以 jdk-21_linux-x64_bin.rpm 来做示例(只要是rpm都是一样的操作)。
        在线下载:wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
    Ⅱ:执行安装(注:rpm -ivh 安装命令)
        rpm -ivh jdk-21_linux-x64_bin.rpm

'================== 通过 Centos7 的 RPM 包方式安装 Zulu JDK(开源免费) =================='
    Ⅰ:准备好需要安装的rpm安装包
        下载的rpm包:zulu8.82.0.21-ca-jdk8.0.432-linux.x86_64.rpm
        安装所需的依赖:
            wget https://vault.centos.org/7.6.1810/os/x86_64/Packages/libXtst-1.2.3-1.el7.x86_64.rpm
            rpm -ivh libXtst-1.2.3-1.el7.x86_64.rpm
        Centos7缺啥包去这里面找:https://vault.centos.org/7.6.1810/os/x86_64/Packages/
    Ⅱ:执行安装(注:rpm -ivh 安装命令)
        rpm -ivh zulu8.82.0.21-ca-jdk8.0.432-linux.x86_64.rpm

'补充:检查Java环境是否成功安装'
    获取java版本号
        java -version
            # java version "21.0.5" 2024-10-15 LTS
            # Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239)
            # Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)
    查看JDK的安装路径(安装后才有)
        which java
            # /usr/bin/java

(二):yum安装JDK环境

'通过yum安装的JDK基本上都是Open JDK,按照不同的版本下载即可'
'yum方式安装的则不用额外拷贝安装包,直接使用yum命令下载包信息'
Ⅰ:检查是否系统自带JDK环境(若存在JDK环境则需要卸载)
    yum list installed | grep 'java\|jdk\|gcj\|jre\|zulu'

Ⅱ:搜素yum仓库中JDK软件包列表(注:yum search java 搜索关于Java相关软件包的操作)
    yum search java | grep -i --color jdk
    打印(部分):
        java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos(OpenJDK演示)
        java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment(OpenJDK开发环境)
        java-1.7.0-openjdk-headless.x86_64: The OpenJDK runtime environment without(OpenJDK运行时环境)
        java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation(OpenJDK API文档)
        java-1.8.0-openjdk.x86_64 : OpenJDK 8 Runtime Environment(OpenJDK 8运行时环境)
        java-1.8.0-openjdk-devel.x86_64 : OpenJDK 8 Development Environment(OpenJDK 8开发环境)
    命令说明:
        grep -i --color jdk:这部分命令使用grep工具进行匹配和过滤操作。
            > grep:是一个用于在文本中进行模式匹配的命令。
            > -i:选项表示忽略大小写进行匹配。
            > --color:选项表示以彩色高亮显示匹配的结果。
            > jdk:是要匹配的关键字,该命令将过滤出包含"jdk"关键字的结果并进行颜色高亮显示。

Ⅲ:选择搜素的指定yum源文件安装
    yum install -y java-1.8.0-openjdk.x86_64

Ⅳ:检查Java环境是否成功安装
    ## 获取java版本号
        java -version
    ## 查看JDK的安装路径(安装后才有)
        which java

(三):卸载安装的JDK环境

'RPM方式卸载Java环境:'
    Ⅰ:rpm查询java安装包名称(注:rpm -qa 列举出所有RPM安装的包)
        ## 执行查询命令
            rpm -qa | grep 'java\|jdk\|gcj\|jre\|zulu'
            打印:
                jdk-21-21.0.5-9.x86_64
    Ⅱ:卸载查询出来的所有安装包名称(注:rpm -e --nodeps 是RPM卸载命令)
        ## 执行卸载命令(查询出来什么就卸载什么)
            rpm -e jdk-21-21.0.5-9.x86_64
    Ⅲ:补充
        ## 查询安装包安装到系统的文件位置(rpm -ql 安装包名称)
            rpm -ql jdk-21-21.0.5-9.x86_64

'yum方式卸载Java环境:'
    Ⅰ:yum查询Java安装的环境信息(注:yum list installed 列举所有安装的服务)
        ## 执行命令
        --> yum list installed | grep 'java\|jdk\|gcj\|jre\|zulu'
            打印:
                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-headless.x86_64 1:1.8.0.412.b08-1.el7_9 @updates
                javapackages-tools.noarch          3.4.1-11.el7            @os
                python-javapackages.noarch         3.4.1-11.el7            @os
                tzdata-java.noarch                 2024a-1.el7             @updates
    Ⅱ:卸载查询出来的所有安装信息(注:yum -y remove 是yum卸载命令)
        ## 执行卸载命令(查询出来什么就卸载什么)
            yum -y remove 'copy-jdk-configs*' 'java-1.8.0-openjdk*'
            yum -y remove 'javapackages-tools*' 'python-javapackages*' 'tzdata-java*'