Linux安装与切换JDK
以下示例以Ubuntu为准。项目没有指定小版本时,优先使用系统软件源;必须使用特定版本时,再选择手动安装。
1.通过APT安装
APT安装的JDK由系统包管理器维护,依赖、证书和安全更新更容易统一管理。
查询可用版本:
bash
apt search openjdk | grep -- '-jdk'以JDK17为例:
bash
sudo apt update
sudo apt install openjdk-17-jdk验证安装结果:
bash
java -version
javac -version2.手动安装指定版本
老项目可能要求固定的JDK版本,软件源中不一定提供。这种情况下可以下载对应的tar.gz安装包并解压到统一目录。
以下以jdk-8u202-linux-x64.tar.gz为例:
bash
sudo mkdir -p /usr/local/java
sudo tar -xzf jdk-8u202-linux-x64.tar.gz -C /usr/local/java解压后的目录为:
text
/usr/local/java/jdk1.8.0_202不要混用JDK17安装包和JDK8目录名称,否则后续配置容易指向错误版本。
3.注册到update-alternatives
分别注册java和javac:
bash
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_202/bin/java 10802
sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_202/bin/javac 10802切换版本:
bash
sudo update-alternatives --config java
sudo update-alternatives --config javacjava和javac需要选择同一套JDK,避免运行版本与编译版本不一致。
查看当前命令实际指向的文件:
bash
readlink -f "$(command -v java)"
readlink -f "$(command -v javac)"4.配置JAVA_HOME
部分工具会读取JAVA_HOME。只使用固定版本时,可以在~/.bashrc中明确配置:
bash
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export PATH="$JAVA_HOME/bin:$PATH"保存后重新加载:
bash
source ~/.bashrc如果经常通过update-alternatives切换版本,可以根据当前java命令动态计算:
bash
export JAVA_HOME="$(dirname "$(dirname "$(readlink -f "$(command -v java)")")")"
export PATH="$JAVA_HOME/bin:$PATH"现代JDK通常不需要手动配置CLASSPATH。全局设置旧版dt.jar和tools.jar可能影响其他项目,除非旧工具明确要求,否则不要添加。
5.常见问题
java和javac版本不一致
分别执行以下命令重新选择:
bash
sudo update-alternatives --config java
sudo update-alternatives --config javacJAVA_HOME仍指向旧版本
检查配置来源:
bash
grep -R "JAVA_HOME" ~/.bashrc ~/.profile /etc/environment /etc/profile.d 2>/dev/null修改后重新打开终端或执行source ~/.bashrc。
不要直接修改/usr/bin/java
/usr/bin/java由系统的替代项机制管理。手动覆盖软链接可能在软件升级后失效,应使用update-alternatives切换。