一个工具管理你的所有 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也有,一般把一个人当做主机,其他人通过该主机拼装代码 ...
随机推荐
- SpringSecurity5(14-Gateway整合)
MVC 与 WebFlux 关系 SpringSecurity 设置要采用响应式配置,基于 WebFlux 中 WebFilter 实现,与 Spring MVC 的 Security 是通过 Ser ...
- ubantu&windows搭建gis开发环境(qt+osg+osgearth+osgqt)
一.ubantu22.04中搭建地图开发环境(qt5.15.2 + osg3.7.0 + osgearth3.7.1 + osgqt) (1)下载安装qt5.15.2 : (2)下载编译安装osg3. ...
- RL · Exploration | 使用时序距离构造 intrinsic reward,鼓励 agent 探索
论文标题:Episodic Novelty Through Temporal Distance. ICLR 2025,8 8 6 5 poster. arxiv:https://arxiv.org/a ...
- AbstractAutoProxyCreator#postProcessBeforeInstantiation
一.定义 postProcessBeforeInstantiation 是 Spring AOP 动态代理的核心扩展点,通过提前创建代理对象优化性能,并支持丰富的自定义逻辑(如事务.安全) 二.代码分 ...
- 在MaxKB中实现准确的Chat TO SQL(BI)
主要面向考试成绩管理系统(目前支持旭日图.仪表盘柱状图.桑基图.漏斗图.河流图.数据聚合图.散点图.南丁格尔玫瑰图.饼状图.环形图.堆叠柱状图.堆叠折线图.堆叠面积图.面积图.折线图) 主要思路: 第 ...
- 关于Cesium渲染PrimitiveCollection和图层的树状管理的问题
原文:关于Cesium渲染PrimitiveCollection和图层的树状管理的问题 - 搜栈网 (seekstack.cn)
- 【doctrine/orm】findBy用法
用法: //$condition array('表字段对应的entity的属性'=>'值') //$orderBy array('表字段'=>'ASC/DESC') //$count in ...
- AspNetCore 请求产生 FreeSql 所有操作 SQL 日志输出到前端
第一步:定义注入类型 public class CurdAfterLog : IDisposable { public static AsyncLocal<CurdAfterLog> Cu ...
- 在AI大爆发的背景下,企业管理软件有什么冲击
今天与同行开会提到在AI大爆发的背景下,未来企业管理软件究竟有什么冲击? 我和同事对此问题进行了探讨,一些拙见,与大家分享.先直接说观点:在未来的5到10年,制造业的管理软件市场将几乎消失.下面我来聊 ...
- CTF_RSA解密学习
CTF_RSA解密学习 00X00 .先看了一边李永乐老师的视频 https://www.bilibili.com/video/av26639065/ 00X01.对称.非对称算法了解 对称算法,加解 ...