多JDK版本管理方案-SDKMAN

SDKMAN:Java生态的终极环境管理工具 SDKMAN(Software Development Kit Manager)是一款专为Java开发者设计的命令行工具,用于轻松管理多个SDK版本。它支持Java、Scala、Kotlin等JVM语言以及Maven、Gradle、Spring Boot CLI等常用工具,堪称Java开发者的瑞士军刀。 阅读详情

近年来java加快了更新的步伐,一个版本用到底的时代也逐渐成为过去时。在实际开发过程中不管是jdk升级还是尝试新技术栈都有可能会遇到需要多jdk版本切换的场景。


一、SDKMAN! 概述

SDKMAN!(Software Development Kit Manager)是一个在 Unix-like 系统上(Linux/macOS/Cygwin/WSL)管理多个并行安装的开发工具版本的工具,常用于管理:

Java(JDK 各个发行版和版本)、Groovy、Scala、Kotlin、Maven、Gradlesbt、ant、leiningen 等

✅ 功能特点:

  • 安装/卸载指定版本的 SDK 工具(如 JDK 8、JDK 11、JDK 17)

  • 自动设置默认版本

  • 快速切换不同版本

  • 支持多种开发工具,不限于 Java


二、安装 SDKMAN!

✅ 1. 安装命令(macOS/Linux/WSL):

curl -s "https://get.sdkman.io" | bash

安装完成后,按提示执行:

source "$HOME/.sdkman/bin/sdkman-init.sh"

或者重新开启一个 shell 即可。

✅ 2. 验证安装:

sdk version


三、常用命令详解

✅ 1. 列出可安装的 SDK 类型:

sdk list

常用工具包括:

  • java

  • gradle

  • maven

  • kotlin

  • groovy

  • sbt

  • scala

✅ 2. 安装指定 SDK 类型的版本:

sdk install java 17-tem

支持的 Java 发行版包括:Temurin(Eclipse)、OpenJDK、Oracle、GraalVM等

✅ 3. 查看可用版本:

sdk list java

✅ 4. 设置默认版本:

sdk default java 17-tem

此版本在所有新终端中生效。

✅ 5. 临时使用某个版本(当前 shell):

sdk use java 11.0.20-tem

✅ 6. 卸载 SDK:

sdk uninstall java 17-tem

✅ 7. 显示当前正在使用的版本:

sdk current

📘 SDKMAN! 常用命令速查表

命令示例含义
sdk versionsdk version显示 SDKMAN 当前版本
sdk helpsdk help显示帮助信息
sdk listsdk list列出所有可管理的候选工具(如 java、maven)
sdk list <candidate>sdk list java显示某个工具的所有版本
sdk install <candidate> [version]sdk install java 17.0.9-tem安装指定版本,若省略版本则安装最新版本
sdk uninstall <candidate> <version>sdk uninstall java 11.0.20-tem卸载某个工具的某个版本
sdk use <candidate> <version>sdk use java 17.0.9-tem临时切换到某个版本(当前 shell 会话)
sdk default <candidate> <version>sdk default java 17.0.9-tem设置某个版本为默认(永久生效)
sdk current [candidate]sdk current / sdk current java显示当前使用的版本(可选指定工具)
sdk env initsdk env init初始化 .sdkmanrc 文件支持功能
sdk envsdk env在有 .sdkmanrc 的目录中启用对应版本
sdk env installsdk env install根据 .sdkmanrc 安装缺失版本
sdk upgradesdk upgrade检查并升级所有已安装的工具版本(交互式)
sdk flush archivessdk flush archives清理下载缓存的安装包
sdk flush tempsdk flush temp清理临时文件
sdk flush versionsdk flush version清理版本元数据缓存

四、SDKMAN! 工作原理

  • SDKMAN 会在用户主目录下安装软件包(例如 ~/.sdkman/candidates/java)

  • 切换版本时,会动态修改 PATH 和 JAVA_HOME 等环境变量

  • 默认版本通过写入 .sdkmanrc 或 $HOME/.sdkman/ 目录下进行持久化配置


五、高级用法:添加本地 JDK 到 SDKMAN 

SDKMAN 实际上只是通过软链接和目录结构来管理各个工具版本,你可以手动将已有的 JDK 注册为 SDKMAN 可用版本。


📌 步骤如下:

✅ 假设你本地已经安装了 JDK:

/usr/local/java/jdk-17.0.9/


📁 步骤 1:定位 SDKMAN 的 java 目录

cd ~/.sdkman/candidates/java


🏷️ 步骤 2:创建一个版本目录

例如我们想把这个 JDK 注册为 17.0.9-local 版本:

mkdir 17.0.9-local


🔗 步骤 3:软链接到你本地 JDK 安装目录

ln -s /usr/local/java/jdk-17.0.9/* ~/.sdkman/candidates/java/17.0.9-local/

⚠️ 注意:不要将整个 JDK 目录嵌套放进去,而是将内容软链接进去,或直接复制内容。


✅ 步骤 4:验证并使用

sdk use java 17.0.9-local

sdk default java 17.0.9-local

java -version


🔍 示例结构检查

SDKMAN 要求目录下结构如下:

~/.sdkman/candidates/java/17.0.9-local/
├── bin/
│   └── java
├── lib/
├── include/
├── ...

只要你能保证这个结构,SDKMAN 就能正常使用这个版本。


六、实际企业级使用场景

  • CI/CD 环境统一:通过 .sdkmanrc 保证团队成员使用同一版本,减少版本不一致的问题

  • 多项目并行开发:切换 Java 版本或构建工具版本便捷

  • 版本测试回归:快速在不同 JDK/Maven/Gradle 版本之间切换做兼容性测试


七、和其他工具对比

工具支持类型特点
SDKMAN!Java全家桶一站式、简洁、跨工具支持
jEnvJava 版本管理类似 pyenv,专注于 Java
asdf多语言版本管理器插件式,支持 Go、Node 等
HomebrewmacOS 包管理安装 Java 支持有限
JDK多版本管理工具jenv java JDK多版本控制工具 jenv 阅读详情

相关推荐

Windows下使用SDKMAN对JDK(Java)进行多版本管理

MSYS2(Minimal SYStem 2)是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于Linux的shell环境,可以在Windows系统中编译和运行许多Linux应用程序和工具。MSYS2基于MinGW-w64平台,提供了一个完整的开发环境,包括GCC编译器、GDB调试器、Make、Git版本控制系统和许多其他开发工具。除了常用的开发库和工具之外,MSYS2还提供了许多专门针对Windows平台的库和工具,方便开发人员进行跨平台开发和移植工作。

知行合一 4473

使用 SDKMAN 管理多版本本地 Java 环境---Centos8 & Windows

可以在本地存在多个 java 环境,快速切换功能,同时,他不止于 java sdk,还有maven、tomcat等等。1、WSL:需要先安装适用于 linux 的 windows 子系统(WSL),同时还需要基本的工具集(bash、zip、unzip、curl)这里注意一下,如果下载失败了,就需要执行下面的命令将已有的 sdkman 文件夹给删除(卸载),否则将会提示你已经安装了 sdkman 了。git 是大多数同学会使用的到的工具,尤其是在多版本控制以及多人协同场景下,所以本文将以第二种方式进行安装。

fans_x的博客 5208

MacBook用户必看:JDK17安装与环境变量配置全攻略(含多版本切换技巧)

本文为MacBook用户提供JDK17的详细安装指南与环境变量配置方法,涵盖多版本切换技巧。通过Homebrew安装OpenJDK17,配置.zshrc文件实现动态版本管理,并推荐使用jenv或SDKMAN工具提升效率,帮助Java开发者在macOS环境下高效工作。

weixin_42629815的博客 250

SDKMAN详细使用教程,嘎嘎好用的java版本管理工具~

以上为SDKMAN的基本使用命令,如果想要更多指令,可以输入。然后根据需求新开一个终端或者输入右边的代码重置一下。直接复制官网里的安装指令到终端中执行即可。,如果有正常显示版本号,则表示安装成功了。来查看全部的指令内容。

GottenZZP的博客 1万+

Java开发必备:多版本JDK管理工具与实战指南

在Java开发中,JDK版本管理是开发者必须掌握的核心技能。不同版本的JDK在语法特性、API支持和性能表现上存在显著差异,这使得多版本管理工具成为开发环境配置的关键组件。通过版本管理工具如SDKMAN!和jEnv,开发者可以高效切换JDK版本,避免手动修改环境变量的繁琐与错误。这些工具不仅支持全局和项目级别的版本配置,还能与Maven、Gradle等构建工具无缝集成。对于企业级开发,合理管理多个JDK版本能确保项目兼容性,提升开发效率。特别是在维护老项目和使用新特性的场景下,掌握JDK版本管理技巧尤为重要

weixin_33393017的博客 258

Java开发环境搭建全攻略:从JDK安装到多版本管理

Java开发环境的搭建是每位开发者入门和项目启动的必经之路,其核心在于理解JDK、JRE与JVM的层级关系与协作原理。JDK作为完整的开发工具包,包含了运行环境与编译工具,是实现Java程序从源码到执行的关键。正确配置环境变量,特别是JAVA_HOME和PATH,是确保命令行与各类开发工具能识别并使用指定Java版本的技术基础。对于企业级应用和长期项目维护,选择OpenJDK发行版(如Eclipse Temurin)并利用LTS版本,能有效平衡功能、稳定性与许可风险。在实际开发场景中,开发者常需在不同项目间

weixin_42556197的博客 281

Win10系统下JDK18安装与环境变量配置全攻略(附常见问题解决方案)

本文详细介绍了在Win10系统下安装JDK18并配置环境变量的完整步骤,包括下载安装、解决JRE缺失问题、环境变量配置详解及常见问题解决方案。特别针对'java'命令不可用、版本不匹配等常见问题提供了实用解决方法,帮助Java开发者快速搭建稳定的开发环境。

z5a6b的博客 1040

Windows 11下Java环境变量配置全解析:从JAVA_HOME到多版本管理

环境变量是操作系统管理应用运行环境的核心机制,它定义了系统查找可执行文件、库和配置的路径规则。在Java开发中,正确配置环境变量是确保开发工具链稳定运行的基础,其原理在于通过JAVA_HOME变量指向JDK根目录,再通过Path变量使系统能在命令行中定位java、javac等关键可执行文件。这一配置的技术价值在于为Maven、Gradle等构建工具和IntelliJ IDEA、VS Code等IDE提供统一的JDK识别基准,避免因路径问题导致的编译和运行时错误。在Windows 11系统下,由于系统路径管理

weixin_30387799的博客 317

Java多版本JDK管理实践与工具指南

在Java开发中,JDK版本管理是保证项目兼容性和开发效率的关键技术。通过环境变量配置原理,开发者可以手动指定JAVA_HOME实现版本切换,但面对多项目并行开发时效率较低。自动化脚本和专用工具(如SDKMAN、jEnv)通过封装底层命令,提供了更高效的版本切换方案。这些技术特别适用于需要同时维护基于不同Java LTS版本(如JDK 8/11/17)的企业级项目,能有效解决开发环境与生产环境版本不一致导致的构建问题。结合IDE集成和容器化方案,开发者可以构建从本地开发到持续集成的完整版本管理体系。

weixin_31714129的博客 305

Linux新手必看:解决‘javac: command not found‘的3种方法(附详细步骤)

本文针对Linux新手常见的'javac: command not found'编译报错问题,提供了三种从基础到进阶的解决方案。首先解释了错误根源在于系统PATH环境变量中缺少JDK的javac编译器路径,随后详细介绍了通过包管理器安装完整JDK、手动配置JAVA_HOME与PATH环境变量以及使用SDKMAN!进行多版本管理的具体步骤,帮助用户彻底解决Java编译环境配置问题。

c7d8e的博客 484

Java多版本管理:手动与自动化工具全解析

Java开发中,JDK版本管理是基础但关键的技能。通过环境变量JAVA_HOME和PATH的配置,开发者可以在不同Java版本间切换,满足项目兼容性测试、问题复现等需求。随着微服务和容器化技术的普及,多版本管理变得更加重要。手动配置适合简单场景,而jenv和SDKMAN等工具提供了更高效的版本切换方案。在企业级开发中,结合Maven/Gradle的版本控制和持续集成流程,可以确保构建环境的一致性。本文详细介绍从基础环境配置到IDE集成、构建工具适配的全套解决方案,帮助开发者应对Java 8到Java 17等

weixin_31220401的博客 202

Linux多JDK版本管理方案:从环境变量到项目级自动切换

在开发环境中,多版本JDK并存是常态,但频繁切换常导致JAVA_HOME配置混乱、环境变量配置失败等难题。理解JDK版本管理的核心,在于从系统级、用户级到项目级的分层设计。传统工具如update-alternatives仅能管理系统级默认入口,而SDKMAN通过软链接与自动环境变量联动,实现了JVM生态内的一键切换。更进一步,mise(前身rtx)以声明式配置文件支持目录级自动切换,让每个项目各取所需。通过合理组合这些工具,配合.java-version、Maven Toolchains等机制,可彻底解决J

weixin_32308101的博客 262

Java环境变量配置指南与多版本管理实践

环境变量是操作系统实现路径映射的核心机制,通过PATH等变量指定可执行程序的搜索路径。在Java开发中,正确配置JAVA_HOME和PATH变量是保证javac/java命令可用的关键,这涉及到JDK安装路径识别、系统命令解析等底层原理。现代Java项目通常需要管理多个JDK版本,通过工具如jenv或sdkman可以实现版本热切换,这对持续集成和跨平台开发尤为重要。本文以OpenJDK和Oracle JDK的版本选择为切入点,详解Windows/macOS/Linux三大平台的环境变量配置差异,并给出多版本

weixin_29224529的博客 309

Linux多JDK共存与切换:三种方案详解

Java开发中,JDK版本兼容性一直是工程实践的痛点。不同项目可能分别依赖Java 8、17或21,而单版本JDK无法满足复杂环境需求。理解PATH与JAVA_HOME的作用机制,是多版本切换的关键。本文将基于Linux环境,介绍三种主流的多JDK管理方案:手写切换脚本、update-alternatives和SDKMAN。从环境变量配置到软链接切换,从方案对比到常见坑点排查,帮助开发者在开发、构建与部署场景中轻松实现JDK版本的灵活切换,提升工作效率。

weixin_31309419的博客 209

Java 11环境配置全攻略:从下载安装到IDE集成与多版本管理

Java环境配置是开发者入门与项目部署的基础环节,其核心在于理解JDK、JRE与系统环境变量的协同原理。通过正确设置JAVA_HOME和PATH变量,操作系统才能识别并调用Java编译与运行命令,这是保障命令行工具、构建脚本及持续集成流程稳定运行的技术基石。掌握手动配置不仅有助于搭建标准化开发环境,更能为排查类路径冲突、优化JVM参数等进阶问题提供底层支持。在实际应用场景中,针对Java 11这一长期支持版本,开发者需从Oracle JDK或OpenJDK发行版(如Eclipse Temurin)中获取合适

weixin_32175665的博客 302

39文章解读与程序——EI\CSCD\北大核心《基于两阶段鲁棒优化算法的微网多电源容量配置》已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1208

JDK 17 安装配置全指南:从环境变量到多版本管理

Java 开发环境配置是工程实践的基石,其核心在于 JDK 版本管理与系统级路径设置。JDK 作为 Java 运行时与编译器的统一载体,其安装本质是将 JVM、javac 及标准类库纳入操作系统可识别的执行路径。技术价值体现在稳定性(LTS 长期支持)、兼容性(Spring Boot 3.x 强制要求)与新特性可用性(如 sealed 类、switch 表达式)。典型应用场景覆盖本地开发调试、Maven/Gradle 构建、IDE 集成及微服务项目启动。本文聚焦 JDK 17 这一关键 LTS 版本,系统解

weixin_29202213的博客 316

【ESP32设备通信】-LoRaWAN网关

在物联网 (IoT) 时代,连接设备和收集数据变得比以往任何时候都更加容易和重要。 LoRaWAN(远程广域网)技术已成为远程、低功耗物联网通信的强大解决方案。 在本教程中,我们将使用 ESp32 构建 LoRaWAN 网关电路,并使用 ESP32 和 BME280 传感器构建传感器节点电路。 对于这两个电路,我们将使用基于 SX1278 (Ra-02) LoRa 模块在设备之间进行无线通信。 我们还将向您展示如何将传感器数据传输到流行的物联网平台 ThingSpeak。

视觉与物联智能 1580

PCL2启动器Java环境配置解决指南:从报错到修复的实战手册

在使用PCL2(Plain Craft Launcher 2)启动器安装Minecraft Forge时,许多用户都会遇到各种Java环境配置问题。这些问题往往表现为安装中断、报错信息复杂等情况,其中"Java类文件失踪症"(NoClassDefFoundError)是最常见的错误之一。本文将通过系统化的环境诊断和分层解决方案,帮助你彻底解决Java环境配置问题,确保Forge安装顺利完成。 #

gitblog_00742的博客 592

【C#程序员入门AI】必知的一些知识

2026年C#调用AI,核心就4个概念+3种方式4个概念:大模型(大脑)、嵌入(数字密码)、向量(载体)、Agent(超级助理)3种方式:云端API(快)、本地模型(隐私)、混合部署(最佳)不用怕复杂,跟着这个思路走,你就能从“AI小白”变成“C# AI开发能手”,把AI集成到你的.NET项目里,提升效率、创造价值!

人工智能AI技术 407

脉冲变压器电感选型参数,结构原理,工艺与注意问题总结

脉冲变压器电感简称脉冲变压器,是一种特殊类型的变压器,主要用于处理脉冲信号。它的主要特性是能够在短时间内承受高电压和大电流。脉冲变压器主要用于开关电源、脉冲功率放大、雷达脉冲调制等领域。本文对脉冲变压器的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1340

Spring Boot项目在Java 8环境下的创建与配置指南

Java 8作为长期支持版本(LTS)至今仍是企业开发的主流选择,特别是在遗留系统维护和特定环境约束场景下。随着Spring Boot 3.0强制要求Java 17+,开发者面临框架版本与JDK版本的兼容性问题。通过阿里云提供的定制化Spring Initializr镜像,可以快速创建兼容Java 8的Spring Boot 2.7.x项目,同时获得与官方版本一致的依赖管理能力。这种方案特别适合需要同时维护新旧系统的开发团队,既能利用Spring生态的最新功能,又能满足企业环境的技术栈限制。文中详细演示了在

weixin_33282146的博客 195

MTK(基础篇)ROM烧录以及分区的作用

本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简

weixin_49303682的博客 443
上一篇: 云原生可观测-日志观测(Loki)最佳实践
下一篇: PreparedStatement vs Statement 深度对比 (postgresql)
fire-flyer
博客等级 码龄14年 218粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fire-flyer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值