Skip to content
DAILY QUOTE

“ ”

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 -version

2.手动安装指定版本

老项目可能要求固定的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

分别注册javajavac

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 javac

javajavac需要选择同一套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.jartools.jar可能影响其他项目,除非旧工具明确要求,否则不要添加。

5.常见问题

java和javac版本不一致

分别执行以下命令重新选择:

bash
sudo update-alternatives --config java
sudo update-alternatives --config javac

JAVA_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切换。