安装多个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