在软件开发的世界里,我们经常需要与各种软件开发工具包(SDK)打交道。就像前端开发中经常使用到的npm、pnpm、yarn或者是python的pip,还是python环境包管理anaconda,都是给了开发们莫大的方便呀!而无论是 Java、Groovy、Scala 还是 Kotlin 等语言的 SDK,亦或是 Maven、Gradle 等构建工具,不同的项目可能需要不同版本的 SDK,管理这些 SDK 版本常常让开发者头疼不已。而 SDKMAN(Software Development Kit Manager)的出现,为我们解决了这一难题。
SDKMAN是什么
SDKMAN 是一款专为类 Unix 系统(如 Linux、macOS)设计的命令行工具,它可以帮助开发者轻松地安装、切换、卸载和管理各种 SDK。它就像一个 SDK 的管家,让我们从繁琐的版本管理工作中解放出来,专注于代码的编写。所以Windows用户可以绕道了~
SDKMAN具有以下几个显著特点:
简单易用:通过简洁的命令行指令,就能完成 SDK 的各种管理操作,学习成本低。
多版本支持:可以同时安装同一 SDK 的多个版本,并能快速在不同版本之间切换,满足不同项目的需求。
自动配置:安装 SDK 后,SDKMAN会自动配置相关的环境变量,无需开发者手动设置,大大减少了配置错误的可能性。
丰富的仓库:内置了大量常用的 SDK,涵盖了多种编程语言和开发工具,开发者可以方便地从中获取所需的 SDK。
SDKMAN支持的 SDK
SDKMAN支持众多流行的 SDK,以下是一些常见的类型:
编程语言 SDK:如 Java(包括 OpenJDK、Oracle JDK 等)、Groovy、Scala、Kotlin、Clojure 等。
构建工具:如 Maven、Gradle、Ant 等。
开发框架相关工具:如 Spring Boot CLI 、Mironaut CLI等。
其他工具:如 Jenkins CLI、sbt 等。
随着 SDKMAN的不断发展,支持的 SDK 种类还在持续增加。
SDKMAN的安装
安装 SDKMAN非常简单,只需要在终端中执行以下命令即可(确保系统中已安装 curl 或 wget):
使用 curl:
curl -s "https://get.sdkman.io" | bash
使用 wget:
wget -qO- "https://get.sdkman.io" | bash
执行命令后,按照提示进行操作。安装完成后,需要重新打开终端或者执行以下命令使 SDKMAN生效:
source "$HOME/.sdkman/bin/sdkman-init.sh"
安装成功后,可以通过以下命令验证 SDKMAN!是否安装正确:
sdk version
如果输出类似以下版本信息,则表示安装成功。下图中的红色字体提示网络不通,让你开启离线模式,如果能访问外网则不会有此提示。
注意:
安装sdkman前提条件有以下几个软件必须安装:
curl、unzip、zip、tar、sed或gsed,我之前安装的时候就因为没有安装zip提示安装失败了,直接将脚本下载下来执行才打印出来的日志
SDKMAN的常用命令
SDKMAN提供了丰富的命令,以下是一些最常用的命令:
查看帮助
当你忘记某个命令的用法时,可以使用该命令查看所有命令的说明。
sdk help
列出可安装的 SDK
该命令会列出 SDKMAN仓库中所有可用的 SDK。
sdk list
如果想查看某个具体 SDK 的可用版本,可以在命令后加上 SDK 的名称,例如查看 Java 的可用版本,按q退出,空格下一页:
sdk list java
安装 SDK
使用install命令可以安装指定的 SDK 及其版本。格式为sdk install <sdk名称> <版本号>。例如安装 Java 21 的某个版本:
sdk install java 21.0.8-graal
如果不指定版本号,SDKMAN会安装该 SDK 的默认版本。也支持安装本地目录为版本
sdk install java 17-zulu /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
查看已安装的 SDK
使用该命令可以查看当前系统中通过 SDKMAN安装的所有 SDK 及其版本。
sdk current
如果想查看某个具体 SDK 的安装情况,可以加上 SDK 名称,如:
sdk current java
切换 SDK 版本
当需要在不同版本的 SDK 之间切换时,可以使用use命令。格式为sdk use <sdk名称> <版本号>。例如切换 Java 版本:
sdk use java 17.0.12-oracle
该命令的切换只在当前终端会话中有效,如果想设置全局默认的版本,可以使用default命令,格式类似:
sdk default java 17.0.12-oracle
卸载 SDK
如果某个 SDK 版本不再需要,可以使用uninstall命令将其卸载。格式为sdk uninstall <sdk名称> <版本号>。例如:
sdk uninstall java 17.0.12-oracle
更新 SDKMAN
SDKMAN本身也会不断更新,使用以下命令可以更新到最新版本:
sdk selfupdate
如果想强制更新,可以使用:
sdk selfupdate force
更新已安装的 SDK
检查并更新所有已安装的 SDK 到最新版本:
sdk update
环境脚本,管理项目环境
每次访问项目时都想切换到特定的JDK或SDK?如果你会前端开发或者使用python你就会对这个概念非常熟悉,这不就是nodejs中的pacakge.json或是python中的requirements.txt嘛!而sdkman则是通过项目基础目录中的 .sdkmanrc
文件来实现。此文件可通过发出以下命令自动生成:
sdk env init
当前目录中现已创建了一个包含以下内容的配置文件:
根据配置文件切换相应的sdk版本:
sdk env # 需要当前目录存在.sdkmanrc 文件
如果当前环境里面没有配置文件安装对应的版本或工具则先进行安装:
sdk env install
退出已经激活的环境回到默认环境:
sdk env clear
当你想进入一个目录且目录下有sdk配置文件时,想要sdkman自动切换到对应环境则可以对sdkman进行配置,配置文件为~.sdkman/etc/config,加上或者修改配置项 sdkman_auto_env=true
SDKMAN的实际应用场景
假设你正在开发两个 Java 项目,一个项目需要使用 Java 21,另一个项目需要使用 Java 17。在没有 SDKMAN的情况下,你可能需要手动安装两个版本的 Java,并手动切换环境变量,非常麻烦。而有了 SDKMAN,你可以这样操作:
安装 Java 21 和 Java 17:
sdk install java 21.0.8-graal
sdk install java 17.0.12-oracle
在开发第一个项目时,切换到 Java 21:
sdk use java 21.0.8-graal
此时,通过java -version命令可以看到当前使用的是 Java 21 版本。
当需要开发第二个项目时,切换到 Java 17:
sdk use java 17.0.12-oracle
同样,通过java -version可以验证版本已切换。
通过这种方式,你可以轻松地在不同版本的 SDK 之间切换,满足不同项目的需求,极大地提高了开发效率。
总结
SDKMAN是一款非常实用的 SDK 管理工具,它简化了 SDK 的安装、切换、卸载等操作,让开发者能够更专注于软件开发本身。无论是个人开发还是团队协作,使用 SDKMAN都能为我们带来极大的便利。
如果你还在为管理各种 SDK 版本而烦恼,不妨试试 SDKMAN,相信它会成为你开发工作中的得力助手。