各系统下多版本JDK安装与配置步骤

 更新时间:2026年02月26日 08:39:01   作者:FearlessVoyager  
这篇文章主要介绍了各系统下多版本JDK安装与配置的相关资料,包括Windows、Mac和Linux系统下的具体步骤,文中通过代码将步骤介绍的非常详细,需要的朋友可以参考下

一、概述

当不同项目可能需要不同Java版本,这时我们需要在同一台机器上安装多个版本的JDK,并能够方便地切换。主要通过以下步骤实现:

  1. 下载JDK:从Oracle官网或OpenJDK网站下载所需的JDK版本。
  2. 安装JDK:可以将不同版本的JDK安装到不同的目录。例如,将JDK 8安装在/usr/lib/jvm/jdk-8,将JDK 11安装在/usr/lib/jvm/jdk-11。
  3. 配置环境变量:为不同版本的jdk创建对应的JAVA_HOME,再创建一个通用的JAVA_HOME。
  4. 切换JDK版本:将需要应用的jdk版本的JAVA_HOME赋值给这个通用的JAVA_HOME。
  5. 验证版本:使用java -version命令验证当前使用的JDK版本。

二、Windows 环境多个JDK安装与切换

2.1 下载jdk

去Oracle官网上下载想要安装的jdk版本,https://www.oracle.com/java/technologies/downloads/

2.2 安装jdk

双击.exe文件,选择好安装目录进行安装。多个版本的jdk重复这两步操作就好。

2.3 配置环境变量

  1. 首先找到jdk安装的目录。

  2. 在环境变量中新增不同jdk版本的JAVA_HOME。

  3. 创建一个通用的JAVA_HOME,将需要使用的jdk版本的JAVA_HOME赋值给这个通用的JAVA_HOME。

  4. 配置Path环境变量,编辑Path变量,在后面添加两条变量。如果之前配置过其他的jdk的path变量的话,就先把之前的配置删除,重新添加下面两条。并且这两条需要移动到最前面,不然后续无法切换jdk版本。%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  5. 配置CLASSPATH环境变量,编辑CLASSPATH变量,在后面添加下面的配置,如果之前有配置过,也先删除再重新配置。.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

2.4 切换JDK版本

编辑通用的JAVA_HOME变量的值,将需要应用的jdk的JAVA_HOME值赋值给通用的JAVA_HOME变量。

2.5 验证版本

使用以下命令进行验证当前jdk版本信息:

# 检查当前Java版本
java -version

# 检查Javac版本
javac -version

三、Mac 环境多JDK安装与切换

3.1 下载jdk

去Oracle官网上下载想要安装的jdk版本,M芯片选择arm架构的.bmg格式的文件。
https://www.oracle.com/java/technologies/downloads/

3.2 安装jdk

双击下载的文件,安装步骤一步步点继续就好。

3.3 配置环境变量

  1. 安装完成后会在/Library/Java/JavaVirtualMachines目录下看到安装的jdk信息。

  2. 打开终端,进入到/root目录下,通过open .bash_profile命令打开并编辑.bash_profile文件,如果不存在这个文件就创建一个这个名字的文件。

    export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home
    export JAVA_21_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH:.
    
    alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
    alias jdk21='export JAVA_HOME=$JAVA_21_HOME'
    

  3. 编辑完成之后,执行source .bash_profile 让配置文件生效。再使用java -version命令查看jdk版本信息。

3.4 切换JDK版本

可以根据上面配置的版本别名进行切换。

3.5 验证版本

使用以下命令进行验证当前jdk版本信息:

# 检查当前Java版本
java -version

# 检查Javac版本
javac -version

四、Linux 环境多JDK安装与切换

4.1 下载jdk

  1. 创建统一的安装目录

    # 创建 JDK 安装目录
    sudo mkdir -p /usr/local/src/jdks
    sudo chmod 755 /usr/local/src/jdks
    
  2. 下载 JDK

    # 方式1:从官网下载(需要账户)
    # 访问 https://www.oracle.com/java/technologies/downloads/
    # 或 https://adoptium.net/
    
    # 方式2:使用 wget 下载 OpenJDK(示例)
    cd /tmp
    
    # OpenJDK 8
    wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
    
    # OpenJDK 11
    wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
    
    # OpenJDK 17
    wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
    
    # OpenJDK 21
    wget https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz
    

4.2 安装jdk

# 解压到 /usr/local/src/jdks 目录
sudo tar -xzf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /usr/local/src/jdks/
sudo tar -xzf openjdk-11.0.2_linux-x64_bin.tar.gz -C /usr/local/src/jdks/
sudo tar -xzf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/src/jdks/
sudo tar -xzf openjdk-21.0.2_linux-x64_bin.tar.gz -C /usr/local/src/jdks/

# 重命名为简洁的名称(可选)
cd /usr/local/src/jdks
sudo mv java-se-8u41-ri jdk-8
sudo mv jdk-11.* jdk-11
sudo mv jdk-17.* jdk-17
sudo mv jdk-21.* jdk-21

# 设置权限
sudo chmod -R 755 /usr/local/src/jdks/jdk-*
sudo chown -R root:root /usr/local/src/jdks/jdk-*

4.3 验证安装

# 检查每个 JDK 版本
/usr/local/src/jdks/jdk-8/bin/java -version
/usr/local/src/jdks/jdk-11/bin/java -version
/usr/local/src/jdks/jdk-17/bin/java -version
/usr/local/src/jdks/jdk-21/bin/java -version

4.4 配置 JDK 切换

4.4.1 使用环境变量(按需切换)

创建切换脚本

# 1.创建切换脚本目录
mkdir -p ~/bin/jdk_switcher

# 2.创建脚本
cat > ~/bin/jdk_switcher/jdk-switch.sh << 'EOF'
#!/bin/bash

# JDK 切换脚本

JDK_BASE_DIR="/usr/local/src/jdks"
CURRENT_JDK_FILE="$HOME/.current_jdk"

show_usage() {
    echo "使用方法: $0 [版本号]"
    echo "可用版本:"
    ls -1 "$JDK_BASE_DIR" | grep -E "^jdk-|^java-" | sed 's/^/  /'
    echo ""
    echo "示例:"
    echo "  $0 8        # 切换到 JDK 8"
    echo "  $0 11       # 切换到 JDK 11"
    echo "  $0 17       # 切换到 JDK 17"
    echo "  $0 current  # 显示当前版本"
}

get_jdk_path() {
    local version=$1
    local jdk_path
    
    # 尝试匹配 jdk-版本号
    jdk_path=$(ls -d "$JDK_BASE_DIR"/jdk-$version* 2>/dev/null | head -1)
    
    # 如果没找到,尝试匹配 java-版本号
    if [ -z "$jdk_path" ]; then
        jdk_path=$(ls -d "$JDK_BASE_DIR"/java-$version* 2>/dev/null | head -1)
    fi
    
    echo "$jdk_path"
}

set_jdk() {
    local version=$1
    local jdk_path=$(get_jdk_path "$version")
    
    if [ -z "$jdk_path" ]; then
        echo "错误: 未找到 JDK $version"
        return 1
    fi
    
    if [ ! -d "$jdk_path" ]; then
        echo "错误: JDK 路径不存在: $jdk_path"
        return 1
    fi
    
    # 设置环境变量
    export JAVA_HOME="$jdk_path"
    export PATH="$JAVA_HOME/bin:$PATH"
    
    # 保存当前选择
    echo "$jdk_path" > "$CURRENT_JDK_FILE"
    
    echo "已切换到: $jdk_path"
    java -version
}

show_current() {
    if [ -f "$CURRENT_JDK_FILE" ]; then
        current_jdk=$(cat "$CURRENT_JDK_FILE")
        echo "当前 JDK: $current_jdk"
        $current_jdk/bin/java -version
    else
        echo "未设置 JDK"
        java -version 2>/dev/null || echo "Java 未安装或未在 PATH 中"
    fi
}

# 主逻辑
main() {
    if [ $# -eq 0 ]; then
        show_usage
        return 1
    fi
    
    case "$1" in
        "current")
            show_current
            ;;
        "list")
            echo "已安装的 JDK 版本:"
            ls -1 "$JDK_BASE_DIR" | grep -E "^jdk-|^java-" | sed 's/^/  /'
            ;;
        "help"|"-h"|"--help")
            show_usage
            ;;
        *)
            set_jdk "$1"
            ;;
    esac
}

main "$@"
EOF

# 3.设置执行权限
chmod +x ~/bin/jdk_switcher/jdk-switch.sh

# 4.创建符号链接
ln -sf ~/bin/jdk_switcher/jdk-switch.sh ~/bin/jdk-switch

# 5.添加到 .bashrc 或 .zshrc
echo 'alias java-switch="~/bin/jdk-switch"' >> ~/.bashrc
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

4.4.2 使用切换脚本

# 列出所有 JDK
jdk-switch list

# 切换到 JDK 8
jdk-switch 8

# 切换到 JDK 11
jdk-switch 11

# 查看当前版本
jdk-switch current

# 显示帮助
jdk-switch help

总结 

到此这篇关于各系统下多版本JDK安装与配置步骤的文章就介绍到这了,更多相关多版本JDK安装与配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux部署出现java文件操作报错:java.io.FileNotFoundException解决办法

    linux部署出现java文件操作报错:java.io.FileNotFoundException解决办法

    这篇文章主要g介绍了linux部署出现java文件操作报错:java.io.FileNotFoundException解决的相关资料,这个错误通常表示你的Spring Boot应用程序无法找到指定的文本文件,需要的朋友可以参考下
    2023-12-12
  • springboot 接收List 入参的几种方法

    springboot 接收List 入参的几种方法

    本文主要介绍了springboot 接收List 入参的几种方法,本文主要介绍了7种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • java多线程编程之捕获子线程异常示例

    java多线程编程之捕获子线程异常示例

    java多线程程序中所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。但是无法避免的是unchecked exception,也就是RuntimeException,当抛出异常时子线程会结束,但不会影响主线程
    2014-02-02
  • Java使用重入锁实现线程同步的示例代码

    Java使用重入锁实现线程同步的示例代码

    在多线程环境中,为保证对共享资源的安全访问,常用的同步手段是 synchronized 关键字,但 synchronized 存在局限,本项目旨在通过示例演示如何使用 ReentrantLock 实现线程同步,替代 synchronized,并展示其高级功能,需要的朋友可以参考下
    2025-07-07
  • java使用hadoop实现关联商品统计

    java使用hadoop实现关联商品统计

    本篇文章java使用hadoop实现关联商品统计,可以实现商品的关联统计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • SpringBoot接收前端参数的几种常用方式

    SpringBoot接收前端参数的几种常用方式

    在Spring Boot开发中接收参数是非常常见且重要的一部分,依赖于请求的不同场景,Spring Boot提供了多种方式来处理和接收参数,这篇文章主要给大家介绍了关于SpringBoot接收前端参数的几种常用方式,需要的朋友可以参考下
    2024-07-07
  • Spring Boot+微信小程序开发平台保存微信登录者的个人信息

    Spring Boot+微信小程序开发平台保存微信登录者的个人信息

    这篇文章主要介绍了Spring Boot+微信小程序开发平台保存微信登录者的个人信息,本文主要介绍 wx.login和wx.getProfile接口,因篇幅所限,不能对其它接口做详细介绍 ,有兴趣者可以查阅官方文档
    2022-05-05
  • 优雅地在Java 8中处理异常的方法详解

    优雅地在Java 8中处理异常的方法详解

    异常处理是我们在日常开发中经常会遇到的一种需求,下面这篇文章主要给大家介绍了关于如何优雅地在Java 8中处理异常的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们来一起看看吧
    2019-01-01
  • Spring-Retry(重试机制)解读

    Spring-Retry(重试机制)解读

    这篇文章主要介绍了Spring-Retry(重试机制),具有很好的价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 详解Java合并数组的两种实现方式

    详解Java合并数组的两种实现方式

    这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论