Skip to content

zongwu's blog

adsf-vm

官方给出的定义是:

Manage multiple runtime versions with a single CLI tool

大家在日常开发时,经常遇到需要对同一个编程语言/框架安装不同版本的情况,比如 python 2/3 ,ruby 1.8/1.9,scala 2.11/2.12/... ,gradle 4.x/5.x 等等。虽然已经有pyenv,rvm,sdkman 等等针对这些语言进行多版本的管理,方便不同版本的环境切换,但是:

  1. 要安装很多这种管理软件
  2. 有些编程语言/框架没有类似的多版本环境管理软件

于是有了adsf-vm。一个工具管理多版本的运行时环境,而且提供了plugin的概念,方便所有人扩展定义针对编程语言/框架的管理。比如 Elasticsearch Kubectl MySQL 等都可以用adsf-vm进行版本管理。

安装

参考官方文档即可。https://asdf-vm.com/#/core-manage-asdf-vm 对于macOS 我是通过brew安装,比较简单:

brew install coreutils curl git
brew install asdf

添加到zsh环境:

echo -e "\n. $(brew --prefix asdf)/asdf.sh" >> ~/.zshrc

搞定。

插件管理

主要流程是:先添加插件,然后安装,设置当前使用的版本。就可以使用了。 添加插件:

asdf plugin add <name>
# asdf plugin add gradle

如果需要安装的插件不在当前插件库,也可以指定插件的仓库url:

asdf plugin add <name> <git-url>

查看当前添加的插件列表:

asdf plugin list
# asdf plugin list
# java
# nodejs
asdf plugin list --urls
# asdf plugin list
# java            https://github.com/halcyon/asdf-java.git
# nodejs          https://github.com/asdf-vm/asdf-nodejs.git

更新插件:

asdf plugin update --all

asdf plugin update <name>

移除一个插件:

asdf plugin remove <name>

插件的版本管理

查看插件库里所有可用的版本

asdf list all <name>

asdf list all <name> <version>

指定插件的版本安装:

asdf install <name> <version>

查看已经安装的插件版本:

asdf list <name>

设置插件的当前版本:

asdf global <name> <version> [<version>...]
asdf shell <name> <version> [<version>...]
asdf local <name> <version> [<version>...]

global 就是全局设定了,会把版本写入$HOME/.tool-versions shell 就是设定在当前shell环境生效。实际上是把版本信息写入了当前环境变量ASDF_${LANG}_VERSION local 会写入$PWD/.tool-versions

查看插件的当前版本

asdf current

asdf current <name>

卸载当前版本

asdf uninstall <name> <version>

深入插件

插件非常简单,就是一个git库。包含3个脚本,用于响应list-all, install 或者 uninstall 命令。

  1. bin/list-all 列出插件所有可用版本
  2. bin/download 下载插件
  3. bin/install 安装特定版本的插件

实际上大部分插件都只有bin/list-all bin/install 这俩个文件。