乌班图多jdk环境切换

安装多个jdk环境
sudo apt install openjdk-8-jdk
sudo apt install openjdk-11-jdk
指令切换
sudo update-alternatives --config java
环境配置
export JAVA_HOME=$(update-alternatives --config java | grep "selected" | sed -E 's/.*\(selected\).*\/([^ ]+) .*/\1/') >> ~/.bashrc
export PATH=$JAVA_HOME/bin:$PATH >> ~/.bashrc
环境验证
source ~/.bashrc
echo $JAVA_HOME
java -version
自动化脚本
#!/bin/bash

# Determine the JAVA_HOME path based on the JDK version
set_java_home() {
  JAVA_VERSION=$1
  case $JAVA_VERSION in
    8)
      JAVA_HOME_PATH=/usr/lib/jvm/java-$1-openjdk-amd64
      ;;
    11)
      JAVA_HOME_PATH=/usr/lib/jvm/java-$1-openjdk-amd64
      ;;
    21)
      JAVA_HOME_PATH=/usr/lib/jvm/java-$1-openjdk-amd64
      ;;
    *)
      echo "Usage: $0 {8|11|21}"
      exit 1
      ;;
  esac

  # Check if JAVA_HOME is already set in .bashrc
  if grep -q "export JAVA_HOME" ~/.bashrc; then
    # If found, update the JAVA_HOME value
    sed -i "s|export JAVA_HOME=.*|export JAVA_HOME=$JAVA_HOME_PATH|" ~/.bashrc
  else
    # If not found, add the JAVA_HOME to .bashrc
    echo "export JAVA_HOME=$JAVA_HOME_PATH" >> ~/.bashrc
    echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc
  fi

  # Verify Java installation exists
  if [ ! -d "$JAVA_HOME_PATH" ]; then
    echo "Java $JAVA_VERSION 未安装在 $JAVA_HOME_PATH"
    exit 1
  fi

  # Verify sudo access
  if ! sudo -v; then
    echo "需要 sudo 权限来更新 Java alternatives"
    exit 1
  fi

  # Set the alternative for java
  if ! sudo update-alternatives --set java $JAVA_HOME_PATH/bin/java; then
    echo "设置 java alternative 失败。你可能需要运行:"
    echo "sudo update-alternatives --install /usr/bin/java java $JAVA_HOME_PATH/bin/java $JAVA_VERSION"
    exit 1
  fi

  # Set JAVA_HOME in current shell
  export JAVA_HOME=$JAVA_HOME_PATH
  export PATH=$JAVA_HOME/bin:$PATH

  echo "成功切换到 Java $JAVA_VERSION"
  echo "Java 版本:"
  java -version
  echo "JAVA_HOME: $JAVA_HOME"
}

# Check if script is being sourced
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  echo "错误: 必须使用 source 命令执行此脚本才能影响当前 shell"
  echo "直接运行 'sh jdk_config.sh' 只会影响临时子 shell"
  echo "要使更改在当前 shell 中生效,请使用:"
  echo "  source jdk_config.sh {8|11|21}"
  echo "或:"
  echo "  . jdk_config.sh {8|11|21}"
  echo ""
  echo "执行后请验证:"
  echo "  java -version"
  echo "  echo \$JAVA_HOME"
  exit 1
fi

# Call the function with the first argument
set_java_home $1

posted @ 2024-12-09 15:56  懒懒初阳  阅读(33)  评论(0)    收藏  举报