对开发者来说,就算是同一种语言,我们也可能会在电脑上装数个不同版本的环境,以应对一些历史包袱和复杂多变的客户环境。

所以长远来看,对待任何一门语言的SDK环境,我们都应找到一种方式,合理管理不同的SDK版本。这里我强烈建议你在处理自己电脑的开发环境时,有意识地对SDK版本进行管理,而不是直接上网搜了个最新版的安装包,莫名其妙地装,莫名其妙地用。

别担心,这并不难。各路大神已经把轮子给你造好了。

几乎对任何一门语言,只要你在网上搜索:

xxxLanguage version manager

稍加甄别就能得到自己想要的答案。当然,下面我也把常用的一些语言及环境的version manager列了出来,供你享用。

这些工具的使用大同小异,咱们前后端各选一个代表测试一下,下面先来演示node的管理环境nvm

安装

直接在终端里执行这句话即可:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash

使用

配置完毕后,打开一个新的终端,可以通过nvm ls-remote列出所有可用的node版本了,如果只想查看lts版本,可以通过追加参数实现,nvm ls-remote --lts。确认要安装的版本后,就可以通过nvm install v15.11.0的方式安装了。如果你安装了多个版本,需要在不同版本间切换,只需要简单的使用nvm use v15.11.0就可以进行版本切换了。

更多

关于nvm的使用,还有很多功能有待你来发掘,具体可以执行nvm --help获得更多有用信息。顺便一提,用nvmARM架构的Mac电脑上安装node的时候,是基于node的源码进行本地编译安装的,因而你将获得一个ARM版本的node,这点对正在使用M1芯片Mac的小伙伴非常友好。

介绍完了前端,咱们再来看看后端,这里以Javasdkman进行演示。

安装

也是非常简单,一句话的事。

curl -s "https://get.sdkman.io" | bash

使用

列出可用的Java(JDK)版本,执行sdk list java即可,然后通过执行sdk install java 15.0.2-zulu就可以安装你需要的JDK版本了。

额外说一句,如果是ARM架构的Mac其实是支持x86ARM两种架构的JDK的,只是前者要经过MacOSRosetta2的转译,大部分情况下我们为了追求性能想使用ARM版本的JDK,此时你可以更改sdkman的配置文件,vim ~/.sdkman/etc/config,找到sdkman_rosetta2_compatible那一行,如果设置成true,就仅显示ARM版本的JDK了。

如果你安装了多个版本的JDK,一样可以通过sdk use java 8.0.275-amzn的方式进行切换。如果你想改变全局环境的默认JDK版本,则可以使用sdk default java 8.0.275-amzn进行设置。

其他

sdkman除了支持JDK的版本管理外,还支持Java系的很多技术栈,比如:GradleMavenKotlinGroovy等。所以如果你有这方面需求的话,记得执行sdk --help探索更多有用功能哦。

八卦

其实关于sdkman还有一段有意思的往事,曾经sdkman的名字是gvm,专门用来管理一门自2003年就存在的Groovy语言,这门语言跟Java一样,也是运行在JVM(Java虚拟机)上的。

但是后来程序界又迎来了另一个G姓语言——Go,越来越多的小伙伴希望gvm这个名字能见文知意,用作Go的版本管理,而不是去管理一个小众的JVM语言。

于是在2015年,之前维护gvm的小伙伴,宣布了gvm改名为sdkman,从而把gvm的使用权交给了Go Version Manager