怎样通过SDKMAN管理多个Java版本_Java版本切换工具使用

风静君_3959

风静君_3959

2026-03-21

848人浏览

原创

是,sdkman核心功能就是并行管理多个java版本,各版本独立存放于~/.sdkman/candidates/java下,通过current软链接切换,支持sdk use(会话级)和sdk default(全局默认)两种切换方式。

怎样通过sdkman管理多个java版本_java版本切换工具使用

SDKMAN能同时装好几个Java版本吗

能,而且这是它最核心的用途。SDKMAN不是只装一个Java再覆盖另一个,而是把每个版本独立存放在~/.sdkman/candidates/java下,用软链接current指向当前激活的版本。你装temurin-17.0.2+8、zulu-11.0.22、liberica-21.0.1,它们全共存,互不干扰。

常见错误现象:java -version没变,或者提示command not found: java——大概率是没执行sdk default java xxx或sdk use java xxx,也可能是Shell配置没生效(比如Zsh用户忘了在~/.zshrc里加SDKMAN初始化代码)。

  • 装新版本用sdk install java [版本号],不会动已有版本
  • sdk list java看到带*的是当前默认版本,带+的是当前shell会话中激活的版本
  • 不同Shell(Bash/Zsh/Fish)要各自配置source "$HOME/.sdkman/bin/sdkman-init.sh",否则sdk命令压根不可用

切换Java版本时,为什么IDE还是用旧版本

因为IDE(IntelliJ、VS Code、Eclipse)通常不读SDKMAN的current软链接,它们要么自己缓存了JDK路径,要么依赖系统环境变量(JAVA_HOME),而SDKMAN默认不自动设JAVA_HOME——除非你显式运行sdk default java xxx,它才会写进~/.sdkman/etc/config并影响新打开的终端。

使用场景:你在终端里sdk use java temurin-17.0.2+8切好了,java -version显示正确,但IntelliJ里Maven编译报错说用了Java 11,这就是典型环境隔离问题。

  • IntelliJ:必须手动在Project Structure → Project → Project SDK里选对应版本,不能依赖终端切换
  • VS Code + Java Extension:检查java.home设置是否指向~/.sdkman/candidates/java/temurin-17.0.2+8这类具体路径,而非~/.sdkman/candidates/java/current
  • 命令行工具(如Maven、Gradle)一般没问题,只要它们没硬编码JAVA_HOME,就随终端走

SDKMAN的sdk use和sdk default到底差在哪

差在作用域。sdk use java xxx只影响当前终端会话,关掉窗口就失效;sdk default java xxx会改SDKMAN的全局默认值,所有新开终端都继承它——但它**不改变已打开终端的当前状态**。

Java Maven Common
Java Maven Common

Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。

下载

参数差异:两者都接受完整版本标识符(如temurin-17.0.2+8),不支持模糊匹配(sdk use java 17会失败)。想查可用缩写,得先sdk list java看括号里的别名(比如17.0.2-amzn)。

  • sdk use适合临时测试:跑个老项目用Java 8,测完就切回来,不用动默认设置
  • sdk default适合主力开发环境设定,但别指望它“立刻同步”到所有已开终端
  • 如果某次sdk use后发现java命令仍指向旧版本,先which java确认是不是PATH里有别的Java(比如系统自带的/usr/bin/java)抢在前面

卸载Java版本后,相关项目还能正常构建吗

不能,会直接报Could not find tools.jar或Unable to locate a JVM这类错误。SDKMAN删的是整个目录(如~/.sdkman/candidates/java/zulu-8.72.0.23),路径彻底消失,任何硬编码该路径的配置都会断。

性能 / 兼容性影响:卸载本身很快,但要注意Maven本地仓库(~/.m2/repository)或Gradle缓存(~/.gradle/caches)里可能有按Java版本生成的class文件,换版本后首次构建会重新编译,略慢;但不会损坏缓存。

  • 删前先sdk list java确认没项目正依赖它,尤其是CI脚本里写的固定版本号
  • 卸载命令是sdk uninstall java [版本号],不是remove或delete
  • 误删了?重装同版本即可,SDKMAN不记录项目级依赖关系,它不管你的pom.xml写了什么

最容易被忽略的一点:SDKMAN管理的是java命令和JAVA_HOME,但像javac、jar这些配套工具,全靠$JAVA_HOME/bin在PATH里顶上——所以PATH顺序出问题,javac -version和java -version就可能不一致。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10637

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7762

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6752

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1144

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1396

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2809

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20111

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1235

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习