众所周知,我们在面对同一个 SDK 的不同版本时,需要使用到不同的工具来管理,例如:
- Java:JEnv
- NodeJs:nvm
- ...
它们的原理都是基于系统的软连接,让环境变量指向一个软连接来实现切换的效果。那么有没有一个通用的工具,能够管理软连接,从而实现所有 SDK 的切换呢?
有!它就是:
这个工具专门用于管理软连接,最大程度上进行了抽象,理论上可以管理所有类型的 SDK 版本。
安装
进入 GitHub Releases 中,下载对应系统的可执行文件,然后将其放到任意空文件夹中。
将可执行文件重命名为 slm.exe
(Windows) / slm
(Linux),之后添加如下环境变量:
SLINK_MANAGER_HOME
: 可执行文件所在目录。
使用样例
切换 Java 版本
假设在系统中有两个 Java 版本:
C:\Program Files\Java\jdk-17
C:\Program Files\Java\jdk8u432-b06
依次使用下列命令来管理这两个版本:
shell
# 声明一个(软)链接,名称为 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.3
D:\DevelopmentTool\apache-maven-3.8.8
管理这两个版本:
shell
# 声明一个(软)链接,名称为 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-x64
D:\DevelopmentTool\symbolic-link-manager\sdk\nodejs\node-v20.18.0-win-x64
管理这两个版本:
shell
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,原理我们在前面也已经说过了,就是一个软连接管理工具,欢迎大家使用,提意见!