【JAVA开发】—— 使用SDK管理Ubuntu的jdk

Ubuntu系统使用SDKMAN! 高效管理Java版本(附JDK 21安装实操)

作为Java开发者,在Ubuntu系统中难免会遇到"多个项目需要不同Java版本"的问题------手动安装、配置环境变量、切换版本,步骤繁琐还容易出错。今天给大家推荐一款新手友好、高效便捷的Java版本管理工具------SDKMAN!,不仅能一键安装JDK(以主流的JDK 21为例),还能轻松实现多版本切换、卸载,全程无需sudo权限,彻底解放双手。

一、为什么选择SDKMAN! ?

在介绍安装步骤前,先说说SDKMAN! 的核心优势,尤其是针对Ubuntu用户:

  • ✅ 免管理员权限:用户级安装,无需sudo,不会修改系统核心配置,安全无风险;

  • ✅ 一键操作:安装、切换、卸载JDK(及Maven、Gradle等工具),全程单条命令搞定;

  • ✅ 版本齐全:支持多种JDK发行版(Temurin、OpenJDK、Oracle JDK等),涵盖从Java 8到Java 21+的所有主流版本;

  • ✅ 自动配置环境:安装JDK后无需手动修改/etc/profile或.bashrc,自动配置JAVA_HOME、PATH等环境变量;

  • ✅ 跨项目适配:可临时切换JDK版本(仅当前终端生效),也可设置默认版本(全局生效),适配不同项目需求。

二、Ubuntu安装SDKMAN! (步骤极简)

SDKMAN! 仅支持Unix-like系统(Ubuntu、CentOS、macOS等),Ubuntu下安装全程3步,新手也能轻松跟上。

步骤1:安装SDKMAN! 依赖

SDKMAN! 依赖curl(下载工具)和unzip/zip(解压工具),Ubuntu默认可能未安装,执行以下命令一键安装依赖:

bash 复制代码
sudo apt update && sudo apt install curl unzip zip -y

提示:输入系统密码时无回显,正常输入即可,输完回车确认。

步骤2:下载并安装SDKMAN!

执行官方提供的安装脚本(无安全风险,可放心执行,脚本会自动下载并配置SDKMAN!):

bash 复制代码
curl -s "https://get.sdkman.io" | bash

安装过程中会提示"是否同意许可证",直接按回车确认即可,全程自动完成,无需手动干预。

步骤3:使SDKMAN! 立即生效

安装完成后,需要加载SDKMAN! 的环境变量,无需重启终端,执行以下命令即可:

bash 复制代码
source "$HOME/.sdkman/bin/sdkman-init.sh"

步骤4:验证SDKMAN! 是否安装成功

执行版本查看命令,只要输出版本号,就说明安装成功(版本号可能不同,不报错即可):

bash 复制代码
sdk version

示例输出(正常情况):

bash 复制代码
SDKMAN! 5.18.2
copyright (C) 2024 SDKMAN! open source project
maintainer: Marco Vermeulen (marco@dkane.net)
home: https://sdkman.io

三、用SDKMAN! 一键安装JDK 21(主流稳定版)

推荐安装Eclipse Temurin JDK 21(Adoptium出品,开源免费、稳定兼容,也是目前企业级开发的主流选择),全程无需手动配置环境。

步骤1:(可选)查看可安装的JDK 21版本

如果想确认当前可用的JDK 21发行版和具体版本号,执行以下命令(过滤出21相关版本,避免信息过多):

bash 复制代码
sdk list java | grep -i 21

输出中会显示所有21.x版本的JDK,比如21.0.3-tem(tem即Temurin发行版)、21.0.3-open(OpenJDK发行版)等。

步骤2:安装JDK 21(Temurin稳定版)

执行以下命令,一键安装Temurin JDK 21(版本号可根据上一步的输出替换为最新版):

bash 复制代码
sdk install java 21.0.3-tem

关键提示(新手必看)

  • 安装过程中会自动下载JDK安装包,速度取决于网络,耐心等待即可;

  • 下载完成后,会提示"是否将此版本设为默认JDK?(Y/n)",输入y并回车,后续所有终端都会默认使用JDK 21;

  • 如果不小心输了n,后续也能通过命令设置默认版本(下文会讲)。

步骤3:验证JDK 21是否安装成功

安装完成后,执行以下两个命令,验证Java运行环境和编译器是否正常:

bash 复制代码
# 查看Java运行版本
java -version

# 查看Java编译器版本
javac -version

正常输出(示例):

bash 复制代码
openjdk version "21.0.3" 2024-04-16 LTS
OpenJDK Runtime Environment Temurin-21.0.3+9 (build 21.0.3+9-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.3+9 (build 21.0.3+9-LTS, mixed mode, sharing)
javac 21.0.3

只要输出的版本号是21.x,就说明JDK 21安装成功,且环境变量已自动配置完成。

四、SDKMAN! 后续版本管理(核心常用命令)

安装完SDKMAN! 和JDK 21后,后续的版本切换、卸载、查看等操作,都能通过简单命令实现,整理了最常用的5个命令,直接复制使用即可。

1. 查看已安装的所有JDK版本

查看当前系统中通过SDKMAN! 安装的所有JDK,带*的是当前默认版本:

bash 复制代码
sdk list java

2. 切换JDK版本(临时生效)

仅在当前终端生效,关闭终端后恢复默认版本,适合临时切换版本测试项目:

bash 复制代码
# 格式:sdk use java 版本号
# 示例:切换到JDK 21(替换为自己的版本号)
sdk use java 21.0.3-tem

3. 设置默认JDK版本(永久生效)

设置后,所有终端都会使用该版本作为默认JDK,适合长期使用某个版本:

bash 复制代码
# 格式:sdk default java 版本号
# 示例:设置JDK 21为默认版本
sdk default java 21.0.3-tem

4. 卸载不需要的JDK版本

如果某个JDK版本不再使用,一键卸载,不会残留文件:

bash 复制代码
# 格式:sdk uninstall java 版本号
# 示例:卸载JDK 21(谨慎操作,卸载后无法恢复)
sdk uninstall java 21.0.3-tem

5. 查看当前使用的JDK版本及路径

快速确认当前终端使用的JDK版本,以及JDK的安装路径:

bash 复制代码
sdk current java

五、常见问题排查(新手避坑)

整理了两个新手最容易遇到的问题,提前规避,少走弯路:

  1. 问题1:执行sdk命令提示"command not found"?

    解决方案:重新执行生效命令 source "$HOME/.sdkman/bin/sdkman-init.sh",若想永久避免,可重启终端(重启后会自动加载环境)。

  2. 问题2:安装JDK时下载速度慢?

    解决方案:SDKMAN! 有镜像源,可执行 sdk config 配置国内镜像(新手可直接百度"SDKMAN! 国内镜像配置",复制命令一键配置)。

六、总结

对于Ubuntu系统的Java开发者来说,SDKMAN! 绝对是提升效率的"神器"------无需手动配置环境变量,无需担心多版本冲突,安装、切换、卸载全程一键操作,尤其适合需要频繁切换JDK版本的场景。

本文以JDK 21为例,演示了从SDKMAN! 安装到JDK部署、后续版本管理的全流程,所有命令都经过实测,新手直接复制执行即可。后续如果需要安装其他版本的JDK(比如Java 8、Java 17),只需替换安装命令中的版本号,流程完全一致。

最后提醒一句:安装和卸载JDK时,注意确认版本号,避免误操作;如果需要长期使用某个版本,记得设置为默认版本,减少后续切换的麻烦。

相关推荐
梅雅达编程笔记23 分钟前
04-Python CSV数据保存与翻页抓取
开发语言·爬虫·python·pandas·数据采集·csv
C++ 老炮儿的技术栈29 分钟前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
估值探索者37 分钟前
【Python量化策略实战 #04】Donchian 通道假突破太多?用 ATR 阈值过滤跑通真实突破信号
开发语言·python·接口·api接口·数据api接口·股票数据api接口
个 人 练 习 生39 分钟前
C++:模板初阶详解
开发语言·c++·经验分享·学习
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,C++类继承 — 完整知识点详解(13)
开发语言·c++·学习
弹简特1 小时前
【Java项目-企悦抽】15-活动管理模块02-活动创建测试与活动列表实现
java·开发语言·springboot
斯内普吖1 小时前
(开源)水果蔬菜商城实战指南 基于 Java + SSM + Vue + MySQL
java·vue.js·mysql·开源
wang_shu_mo_ran1 小时前
Spring IoC和DI概念篇
java·后端·spring
小狼154541 小时前
拼多多订单数据导出 CSV 实战:接口分页、字段平铺与 5 个数据坑,多多开票助手
java·前端·javascript
Joe_Wang51 小时前
【从0到1学习JVM · 25】同样都要停顿所有线程,Parallel比Serial到底强在哪
java·jvm·学习·垃圾回收