一个工具管理你的所有 SDK 版本!
众所周知,我们在面对同一个 SDK 的不同版本时,需要使用到不同的工具来管理,例如:
- Java:JEnv
- NodeJs:nvm
- ...
它们的原理都是基于系统的软连接,让环境变量指向一个软连接来实现切换的效果。那么有没有一个通用的工具,能够管理软连接,从而实现所有 SDK 的切换呢?
有!它就是:
这个工具专门用于管理软连接,最大程度上进行了抽象,理论上可以管理所有类型的 SDK 版本。
安装
进入 GitHub Releases 中,下载对应系统的可执行文件,然后将其放到任意空文件夹中。
将可执行文件重命名为 slm.exe (Windows) / slm (Linux),之后添加如下环境变量:
SLINK_MANAGER_HOME: 可执行文件所在目录。
使用样例
切换 Java 版本
假设在系统中有两个 Java 版本:
C:\Program Files\Java\jdk-17C:\Program Files\Java\jdk8u432-b06
依次使用下列命令来管理这两个版本:
# 声明一个(软)链接,名称为 java
slm add link java
# 为链接打标签
slm add tag java 17 "C:\Program Files\Java\jdk-17"
slm add tag java 8 "C:\Program Files\Java\jdk8u432-b06"
# 切换版本
slm use java 17
此时将会在 $SLINK_MANAGER_HOME/app/ 目录创建一个名称为 java 的软连接。之后你需要将 JAVA_HOME 的值设置为对应的软连接路径:
- Windows:
%SLINK_MANAGER_HOME%\app\java - Linux:
$SLINK_MANAGER_HOME/app/java
这里还需确保你已经添加了
%JAVA_HOME%/bin(Windows) /$JAVA_HOME/bin(Linux) 到 Path 中。
仅第一次设置时需要重新打开终端才会生效,之后切换版本时不需要再重新打开。
设置完成后,查看 Java 版本:

当切换 Java 版本后自带切换 Maven 版本
除了单纯的切换某个 SDK 版本外,还支持“连锁切换”。
例如在 Java17 下使用 Maven 3.8.8,在 Java8 下使用 Maven 3.6.3。在切换 Java 版本时能够同时切换 Maven 版本。
Maven 目录:
D:\DevelopmentTool\apache-maven-3.6.3D:\DevelopmentTool\apache-maven-3.8.8
管理这两个版本:
# 声明一个(软)链接,名称为 maven
slm add link maven
# 为链接打标签
slm add tag maven 3.6 "D:\DevelopmentTool\apache-maven-3.6.3"
slm add tag maven 3.8 "D:\DevelopmentTool\apache-maven-3.8.8"
# 和 Java 绑定(Java 的链接需要提前创建)
slm add bind java:17 maven:3.8
slm add bind java:8 maven:3.6
# 先使用一次,不然不会创建软连接
slm use maven 3.6
执行完成后,将环境变量 MAVEN_HOME 设置为 %SLINK_MANAGER_HOME%\app\maven (Windows).
此时完成设置,切换 Java 版本将会跟着切换 Maven 版本:

切换 NodeJs 版本
同样的,你也可以管理 NodeJs 版本,相比与 nvm,主要是少了自动下载功能。
NodeJS 目录:
D:\DevelopmentTool\symbolic-link-manager\sdk\nodejs\node-v22.11.0-win-x64D:\DevelopmentTool\symbolic-link-manager\sdk\nodejs\node-v20.18.0-win-x64
管理这两个版本:
slm add link node
slm add tag node 20 "D:\DevelopmentTool\symbolic-link-manager\sdk\nodejs\node-v20.18.0-win-x64"
slm add tag node 22 "D:\DevelopmentTool\symbolic-link-manager\sdk\nodejs\node-v22.11.0-win-x64"
slm use node 20
添加环境变量(Path): %SLINK_MANAGER_HOME%\app\node (Windows).
总结
理论上该工具支持所有 SDK,原理我们在前面也已经说过了,就是一个软连接管理工具,欢迎大家使用,提意见!
一个工具管理你的所有 SDK 版本!的更多相关文章
- 版本工具管理之----git
如何查看隐藏文件夹: 如果你看不到.git目录,你需要让隐藏的文件可见.具体做法就是打开一个Terminal窗口,输入以下命令: defaults write com.apple.finder App ...
- npm 是node.js下带的一个包管理工具
npm 是node.js下带的一个包管理工具 npm install -g webpack webpack是一个打包工具 gulp是一个基于流的构建工具,相对其他构件工具来说,更简洁 ...
- 找了一个api管理工具
找了一个工具,https://github.com/nutsteam/apiManager选择了如下方式,进行了安装. ● 下载https://git.oschina.net/zhoujingjie/ ...
- ubuntu问题: 同时只能有一个软件管理工具在运行
或者是: 只能同时运行一个更新管理器 打开终端输入命令:sudo dpkg –configure -a 运行,系统问题就解决了
- 使用 Xcode 和 Android Studio 管理 iOS 和 Android 项目版本
在移动应用开发和运营的过程中,版本管理是一个老生常谈的基础问题,一些版本的基本概念也常常会困扰我们的研发和运营人员.同时,手动管理软件版本,也常常会因为不小心导致后续的发布和更新问题. 这里,我准备了 ...
- 写markdown博客如何截图并快速上传到图床——记一个工具插件的实现
1. 背景 写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下: 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名). 上传到图 ...
- 代码管理工具:使用github和git工具管理自己的代码
一.git工具和账户创建 1.1 安装 Git 是 Linus Torvalds 最近实现的源代码管理软件."Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系 ...
- 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)
打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...
- Android开发工具Android Studio、Android SDK和Genymotion完全配置
所谓“工欲善其事,必先利其器”.Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提 ...
- 使用Git版本控制工具管理GitHub
使用Git版本控制工具管理GitHu Git是一个分步式的管理系统:只要上传操作得当,所有的都可以相当于是中央服务器,成员代码共享,A写的代码B也有,一般把一个人当做主机,其他人通过该主机拼装代码 ...
随机推荐
- 阿里云ECS服务器Ubuntu下安装docker-ce技巧
官方文档 先来份Ubuntu 下安装 docker 的官方文档 -> Get Docker CE for Ubuntu 官方文档的安装方式是最靠谱的,但是对于国内的小伙伴来说墙是硬伤... 国内 ...
- PyInstaller 常用用法
PyInstaller 常用用法 PyInstaller 是一个跨平台的 Python 应用打包工具,支持 Windows/Linux/MacOS 三大主流平台,能够把 Python 脚本及其所在的 ...
- Chat to MySQL 最佳实践:MCP Server 服务调用
一.场景说明: 通过 1Panel+MaxKB 两个开源工具结合 MCP 服务实现 Chat to Mysql. 二.资源准备 MySQL:数据库以及数据库表(培训认证中心运营数据表) 1Panel: ...
- 为什么 MySQL 选择使用 B+ 树作为索引结构?
为什么 MySQL 选择使用 B+ 树作为索引结构? MySQL 选择 B+ 树作为其索引结构的主要原因是它具有以下几个优势,这些优势使得 B+ 树非常适合用于数据库系统中的索引实现. 1. 高效的范 ...
- 查阅相关资料, 了解什么是scrum中的3355?
在Scrum中,3355是一个用于描述其核心组成部分的模型,具体包括三个核心角色.三个工件.五个关键事件和五个价值观.下面是对Scrum中3355的详细解释: 三个核心角色 产品负责人(Product ...
- centos7-NFS-网络文件系统
NFS(network file system)网络文件系统 pdf文档下载链接 https://files.cnblogs.com/files/duxingren/NFS.zip 服务器192.16 ...
- c#使用内存映射像处理内存一样去快速处理文件
在 .NET Core 中,`System.IO.MemoryMappedFiles.MemoryMappedFile` 类提供了对内存映射文件的支持.通过将文件映射到内存,你可以在应用程序中直接访问 ...
- Mybatis 框架课程第四天
目录 1 Mybatis 延迟加载策略 1.1 何为延迟加载 1.2 实现需求 1.3 使用 assocation 实现延迟加载 1.3.1 账户的持久层 DAO 接口 1.3.2 账户的持久层映射文 ...
- (dify)如何使用dify自定义知识库【dify外部链接知识库】
尝试dify自定义知识库 根据官网教程,可以从知识库的右上角外部知识库进行添加外部知识库 前往 "知识库" 页,点击右上角的 "外部知识库 API",轻点 &q ...
- 仿EXCEL插件,智表ZCELL产品V1.8 版本发布,增加行高鼠标拖动功能
详细请移步 智表(ZCELL)官网www.zcell.net 更新说明 这次更新主要应用户要求,主要增加了行高鼠标拖动功能,并增加了单元格换行等功能,欢迎大家体验使用. 本次版本更新内容如下: 版本 ...