众所周知,我们在面对同一个 SDK 的不同版本时,需要使用到不同的工具来管理,例如:

  • Java:JEnv
  • NodeJs:nvm
  • ...

它们的原理都是基于系统的软连接,让环境变量指向一个软连接来实现切换的效果。那么有没有一个通用的工具,能够管理软连接,从而实现所有 SDK 的切换呢?

有!它就是:

symbolic-link-manager

这个工具专门用于管理软连接,最大程度上进行了抽象,理论上可以管理所有类型的 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

依次使用下列命令来管理这两个版本:

# 声明一个(软)链接,名称为 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

管理这两个版本:

# 声明一个(软)链接,名称为 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

    管理这两个版本:
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 版本!的更多相关文章

  1. 版本工具管理之----git

    如何查看隐藏文件夹: 如果你看不到.git目录,你需要让隐藏的文件可见.具体做法就是打开一个Terminal窗口,输入以下命令: defaults write com.apple.finder App ...

  2. npm 是node.js下带的一个包管理工具

    npm 是node.js下带的一个包管理工具          npm install -g webpack webpack是一个打包工具 gulp是一个基于流的构建工具,相对其他构件工具来说,更简洁 ...

  3. 找了一个api管理工具

    找了一个工具,https://github.com/nutsteam/apiManager选择了如下方式,进行了安装. ● 下载https://git.oschina.net/zhoujingjie/ ...

  4. ubuntu问题: 同时只能有一个软件管理工具在运行

    或者是: 只能同时运行一个更新管理器 打开终端输入命令:sudo dpkg –configure -a 运行,系统问题就解决了

  5. 使用 Xcode 和 Android Studio 管理 iOS 和 Android 项目版本

    在移动应用开发和运营的过程中,版本管理是一个老生常谈的基础问题,一些版本的基本概念也常常会困扰我们的研发和运营人员.同时,手动管理软件版本,也常常会因为不小心导致后续的发布和更新问题. 这里,我准备了 ...

  6. 写markdown博客如何截图并快速上传到图床——记一个工具插件的实现

    1. 背景 写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下: 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名). 上传到图 ...

  7. 代码管理工具:使用github和git工具管理自己的代码

    一.git工具和账户创建 1.1 安装 Git 是 Linus Torvalds 最近实现的源代码管理软件."Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系 ...

  8. 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)

    打造一个上传图片到图床利器的插件(Mac版 开源)(2018-06-24 19:44) 更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美 ...

  9. Android开发工具Android Studio、Android SDK和Genymotion完全配置

    所谓“工欲善其事,必先利其器”.Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提 ...

  10. 使用Git版本控制工具管理GitHub

      使用Git版本控制工具管理GitHu Git是一个分步式的管理系统:只要上传操作得当,所有的都可以相当于是中央服务器,成员代码共享,A写的代码B也有,一般把一个人当做主机,其他人通过该主机拼装代码 ...

随机推荐

  1. 阿里云ECS服务器Ubuntu下安装docker-ce技巧

    官方文档 先来份Ubuntu 下安装 docker 的官方文档 -> Get Docker CE for Ubuntu 官方文档的安装方式是最靠谱的,但是对于国内的小伙伴来说墙是硬伤... 国内 ...

  2. PyInstaller 常用用法

    PyInstaller 常用用法 PyInstaller 是一个跨平台的 Python 应用打包工具,支持 Windows/Linux/MacOS 三大主流平台,能够把 Python 脚本及其所在的 ...

  3. Chat to MySQL 最佳实践:MCP Server 服务调用

    一.场景说明: 通过 1Panel+MaxKB 两个开源工具结合 MCP 服务实现 Chat to Mysql. 二.资源准备 MySQL:数据库以及数据库表(培训认证中心运营数据表) 1Panel: ...

  4. 为什么 MySQL 选择使用 B+ 树作为索引结构?

    为什么 MySQL 选择使用 B+ 树作为索引结构? MySQL 选择 B+ 树作为其索引结构的主要原因是它具有以下几个优势,这些优势使得 B+ 树非常适合用于数据库系统中的索引实现. 1. 高效的范 ...

  5. 查阅相关资料, 了解什么是scrum中的3355?

    在Scrum中,3355是一个用于描述其核心组成部分的模型,具体包括三个核心角色.三个工件.五个关键事件和五个价值观.下面是对Scrum中3355的详细解释: 三个核心角色 产品负责人(Product ...

  6. centos7-NFS-网络文件系统

    NFS(network file system)网络文件系统 pdf文档下载链接 https://files.cnblogs.com/files/duxingren/NFS.zip 服务器192.16 ...

  7. c#使用内存映射像处理内存一样去快速处理文件

    在 .NET Core 中,`System.IO.MemoryMappedFiles.MemoryMappedFile` 类提供了对内存映射文件的支持.通过将文件映射到内存,你可以在应用程序中直接访问 ...

  8. Mybatis 框架课程第四天

    目录 1 Mybatis 延迟加载策略 1.1 何为延迟加载 1.2 实现需求 1.3 使用 assocation 实现延迟加载 1.3.1 账户的持久层 DAO 接口 1.3.2 账户的持久层映射文 ...

  9. (dify)如何使用dify自定义知识库【dify外部链接知识库】

    尝试dify自定义知识库 根据官网教程,可以从知识库的右上角外部知识库进行添加外部知识库 前往 "知识库" 页,点击右上角的 "外部知识库 API",轻点 &q ...

  10. 仿EXCEL插件,智表ZCELL产品V1.8 版本发布,增加行高鼠标拖动功能

    详细请移步 智表(ZCELL)官网www.zcell.net 更新说明  这次更新主要应用户要求,主要增加了行高鼠标拖动功能,并增加了单元格换行等功能,欢迎大家体验使用. 本次版本更新内容如下: 版本 ...