应选openjdk-XX-jdk包,其中XX为所需主版本号(如11、17、21),-jdk后缀确保含javac等完整开发工具链;切勿选-jre包,因其仅支持运行无编译能力。

Debian里openjdk-xx-jdk包名怎么选
直接看版本号和后缀:Debian仓库中所有OpenJDK软件包都遵循openjdk-XX-jdk命名规则,其中XX是主版本号(如8、11、17、21),-jdk表示含编译器(javac)和完整开发工具链。别选openjdk-XX-jre——它只有运行时,没法编译Java代码。
常见可选包包括:
-
openjdk-8-jdk:仅在维护老旧系统或兼容性测试时用,Debian 12+已移除,需手动添加PPA -
openjdk-11-jdk:LTS版本,企业级项目最稳,Debian 11/12 默认源即提供 -
openjdk-17-jdk:当前主流LTS,新项目首选,性能与API稳定性兼顾 -
openjdk-21-jdk:最新LTS(2023年9月发布),Debian 12.7+及testing源已收录;若apt搜不到,说明你的源未同步或系统太旧
apt search找不到想要的openjdk版本怎么办
不是所有版本都在默认源里,尤其openjdk-21-jdk或openjdk-8-jdk在较老Debian上可能缺失。先确认系统版本和源状态:
- 运行
lsb_release -sc查代号(如bookworm),再查对应Debian发行版支持的OpenJDK版本表 - 执行
apt update后再试apt search openjdk,避免缓存过期 - 若仍无结果,
openjdk-21-jdk可从deb http://deb.debian.org/debian bookworm-backports main源安装(需apt install -t bookworm-backports openjdk-21-jdk) - 拒绝手动下载
.deb包用dpkg -i硬装——容易破坏依赖,且update-alternatives不会自动注册
为什么装了openjdk-17-jdk,java -version还是显示11
这不是安装失败,而是update-alternatives没把新版本设为默认。Debian安装多个JDK后,/usr/bin/java只是个符号链接,实际指向由update-alternatives管理。
验证并切换的方法:
- 运行
sudo update-alternatives --config java,列出所有已注册的java路径,输入编号选择openjdk-17对应的项 - 同样执行
sudo update-alternatives --config javac,确保编译器也同步切换(否则javac -version和java -version会不一致) - 注意:如果只装了一个JDK,
--config命令会提示“only one choice”,此时要检查是否真装上了——dpkg -l | grep openjdk
JAVA_HOME该设成什么路径才对
必须指向JDK安装根目录,不能带/bin或/jre。例如openjdk-17-jdk实际装在/usr/lib/jvm/java-17-openjdk-amd64,那JAVA_HOME就该设为这个完整路径。
找法很固定:
- 用
readlink -f $(which java)得到/usr/lib/jvm/java-17-openjdk-amd64/bin/java,然后dirname两次:dirname $(dirname $(readlink -f $(which java))) - 或者更稳妥:运行
sudo update-alternatives --list java,取输出中路径的父目录 - 设完后务必验证:
echo $JAVA_HOME输出路径,再$JAVA_HOME/bin/java -version确认能跑通 - 别写死架构名(如
amd64)——换成$(dpkg --print-architecture)动态拼接更健壮,但普通用户直接抄路径就行
update-alternatives注册状态和JAVA_HOME路径精度。很多人改了/etc/environment却忘了source,或以为装完就自动生效,结果mvn compile报错才发现javac根本不是同一个版本。


















