SDKMAN!的安装与使用

在使用Linux系统作为开发环境时,偶尔会遇到需要使用最新版软件的问题。 然而,如果使用Debian的stable或Ubuntu的LTS时,却不能用apt简单如愿。 默认包管理,要对发行版的安全与稳定负责,所以策略保守。 最新版软件,往往要过一段(很长的)时间才能使用。

这时就需要有一种用户级的包管理器,可以安装最新版软件,类似MacOS X的HomebrewSDKMAN!是一个不错的尝试,至少对一些JVM的常用软件来说。

安装SDKMAN!

秉承Homebrew的风范,SDKMAN!也可以在联网环境下,用一行命令简单安装。

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

虽然官方是这样推荐的,但为了安全,不应该直接运行任何未知的代码。 可以使用以下的两条命令,先缓存安装代码为脚本sdkman.bash,打开欣赏一下,再执行安装。

curl -sSL "https://get.sdkman.io" > /tmp/sdkman.bash
bash /tmp/sdkman.bash

这个脚本会自动修改.bashrc.zshrc。 执行完后,打开新的Bash或Zsh,或者重新source配置文件,就可以使用了。

使用SDKMAN!

更多用法,详见《Usage - SDKMAN!》。 也可使用sdk help直接查看帮助。

安装软件

sdk install gradle

直接使用install,是安装最新稳定版。 当然,也可以指定一些旧的版本。

sdk install gradle 2.14.1

展示已安装的版本

$ sdk list gradle

================================================================================
Available Gradle Versions
================================================================================
     4.5-rc-2             4.3-rc-1             3.2.1                2.13
     4.5-rc-1             4.3                  3.2                  2.12
 > * 4.5                  4.2.1                3.1                  2.11
     4.4.1                4.2-rc-2             3.0                  2.10
     4.4-rc-6             4.2-rc-1             2.9                  2.1
     4.4-rc-5             4.2                  2.8                  2.0
     4.4-rc-4             4.1                  2.7                  1.9
     4.4-rc-3             4.0.2                2.6                  1.8
     4.4-rc-2             4.0.1                2.5                  1.7
     4.4-rc-1             4.0                  2.4                  1.6
     4.4                  3.5.1                2.3                  1.5
     4.3.1                3.5                  2.2.1                1.4
     4.3-rc-4             3.4.1                2.2                  1.3
     4.3-rc-3             3.4                * 2.14.1               1.2
     4.3-rc-2             3.3                  2.14                 1.12

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

上面的命令行列表中,列出了所有可用的gradle版本。 4.5和2.14.1前面都有*,表示已安装;4.5前面的>,表示当前版本。

改变软件版本

改变版本分两种情况。

一种是改变默认版本,在所有新开的Bash中都生效。

$ sdk default gradle 2.14.1

Default gradle version set to 2.14.1

一种是临时改变版本,仅在当前的Bash中生效。

$ sdk use gradle 2.14.1

Using gradle version 2.14.1 in this shell.

use不仅能临时切换版本,还能自动安装未安装的版本。

$ sdk use gradle 3.5.1

Stop! gradle 3.5.1 is not installed.

Do you want to install it now? (Y/n): y

Downloading: gradle 3.5.1

In progress...

######################################################################## 100.0%

Installing: gradle 3.5.1
Done installing!


Using gradle version 3.5.1 in this shell.

查看当前版本

$ sdk current gradle

Using gradle version 3.5.1

可用软件

Homebrew不同的是,SDKMAN!还未成气候。 (截止至2018年1月)可用软件仅24个,还全是JVM系的,列表如下:

详见《Available SDKs - SDKMAN!》。 CLI下,可以使用sdk list来查看所有软件。

项目代码

SDKMAN!核心的CLI代码在GitHub的sdkman-cli,功能代码主要由Bash组成,30多个文件,总计2000行左右。 这个年代,已经很少能找到这种纯Bash项目了。 更难得的是,它使用Gherkin来做BDD测试;以Groovy来写测试代码,共计2000多行。 它是一个值得参考的Bash项目。 (如果你真的还在用Bash写项目的话。)

然而,问题也是很明显的。 Bash受限于语言本身的设计与狭小的生态,这2000行的代码还有很多问题。 如果要为CLI的品质而打分,满分5分,我只能给2分。

$ sdk broadcast -h
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

Stop! -h is not a valid candidate.

不过,它确实是一个可用的项目。


相关笔记