在Linux切换JDK一条命令就可以解决

【使用命令】
update-alternatives --config java


【案例】

[root@VM-4-14-centos lib]# update-alternatives --config java

共有 2 个提供“java”的程序。

  选项    命令
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre/bin/java)
   2           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64/bin/java)

按 Enter 保留当前选项[+],或者键入选项编号:2

但是在Mac中可没有这个命令。

Mac动态切换JDK方案!

我们本次计划:配别名的方式实现多JDK版本切换,

实现效果如下:使用java11 -version输出jdk11版本信息、使用java17 -version输出jdk17版本信息、使用jdk8就能切换为java8、使用jdk17就能切换为java17

想了解bash_profile作用,请跳转:https://www.zanglikun.com/11801.html

编辑 ~/.bash_profile

vi ~/.bash_profile
# Java & Maven 环境变量配置
# 当前机器使用的是 zsh,~/.zshrc 中已经 source ~/.bash_profile
# 所以这段既可以放 ~/.bash_profile,也可以直接放 ~/.zshrc

# Maven
export MAVEN_HOME="/Users/zanglikun/dev/apache-maven-3.6.3"

# Java 安装路径
export JAVA_HOME_8="/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home"
export JAVA_HOME_11="/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home"
export JAVA_HOME_17="/Users/zanglikun/Library/Java/JavaVirtualMachines/ms-17.0.18/Contents/Home"

# 从 PATH 中移除指定路径,避免多次 source 后 PATH 重复
remove_from_path() {
  local target="$1"
  local item
  local new_path=""
  local old_ifs="$IFS"

  [ -z "$target" ] && return 0

  IFS=":"
  for item in $PATH; do
    [ "$item" = "$target" ] && continue

    if [ -z "$new_path" ]; then
      new_path="$item"
    else
      new_path="$new_path:$item"
    fi
  done

  IFS="$old_ifs"
  export PATH="$new_path"
}

# 清理旧的 Java bin 路径
clean_java_path() {
  remove_from_path "$JAVA_HOME_8/bin"
  remove_from_path "$JAVA_HOME_11/bin"
  remove_from_path "$JAVA_HOME_17/bin"
}

# 切换 Java 版本
use_jdk() {
  local java_home="$1"

  if [ ! -d "$java_home" ]; then
    echo "JDK 路径不存在: $java_home"
    return 1
  fi

  clean_java_path

  export JAVA_HOME="$java_home"
  export PATH="$JAVA_HOME/bin:$PATH"

  # JDK 8 有 jre 目录,JDK 11+ 通常没有
  if [ -d "$JAVA_HOME/jre" ]; then
    export JRE_HOME="$JAVA_HOME/jre"
  else
    unset JRE_HOME
  fi

  hash -r 2>/dev/null

  echo "JAVA_HOME=$JAVA_HOME"
  java -version
}

# 快速切换 JDK
jdk8() {
  use_jdk "$JAVA_HOME_8"
}

jdk11() {
  use_jdk "$JAVA_HOME_11"
}

jdk17() {
  use_jdk "$JAVA_HOME_17"
}

# 快速使用指定版本执行 java 命令
# 例如:java8 -version
java8() {
  jdk8 >/dev/null && java "$@"
}

java11() {
  jdk11 >/dev/null && java "$@"
}

java17() {
  jdk17 >/dev/null && java "$@"
}

# 默认使用 JDK 8
jdk8 >/dev/null

# 配置 Maven
remove_from_path "$MAVEN_HOME/bin"
export PATH="$MAVEN_HOME/bin:$PATH"

不要忘记!!!!配置生效得执行下文命令

source ~/.bash_profile

测试使用

先输入jdk[X]后,再使用java命令即可!

zanglikun@zanglikundeMacBook-Pro lib % jdk11
zanglikun@zanglikundeMacBook-Pro lib % java -version
java version "11.0.18" 2023-01-17 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.18+9-LTS-195)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.18+9-LTS-195, mixed mode)


zanglikun@zanglikundeMacBook-Pro lib % jdk17
zanglikun@zanglikundeMacBook-Pro lib % java -version
java version "17.0.6" 2023-01-17 LTS
Java(TM) SE Runtime Environment (build 17.0.6+9-LTS-190)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.6+9-LTS-190, mixed mode, sharing)


zanglikun@zanglikundeMacBook-Pro lib % java19 -version
java version "19.0.2" 2023-01-17
Java(TM) SE Runtime Environment (build 19.0.2+7-44)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.2+7-44, mixed mode, sharing)

解决Mac重启配置的bash_profile失效问题

mac启动脚本现在修改为更加先进的zsh模式,其作用等同于原来的bash_profile。所以我们只需要在zsh的脚本你加入 source ~/.bash_profile 即可解决问题

vim ~/.zshrc 

添加内容

source ~/.bash_profile

保存即可,重启电脑后,就能使用了

特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤

免责声明:
本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。