这个工具是在大多数基于Unix的系统上管理多个软件开发工具包的并行版本的工具。它提供了一个方便的命令行接口(CLI)和API,用于安装、切换、删除和列出候选对象,它的前身是Groovy环境管理器GVM,其灵感来自Ruby社区广泛使用的非常有用的RVM和rbenv工具。
一. 特点
二. 安装
- 针对类unix平台
# first
$ curl -s "https://get.sdkman.io" | bash
# next
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
# lastly ensure that installation succeeded
$ sdk version
如果安装成功,则终端显示:
SDKMAN 5.7.3+337
- windows安装
请注意,由于SDKMAN是在bash中编写的,因此它需要一个bash环境。SDKMAN不能直接安装在Windows上,需要Cygwin或MSYS+MinGW。
三. 卸载
使用命令:
tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman
$ rm -rf ~/.sdkman
四. 使用
支持安装的开发工具包
Available SDKs
Ant
AsciidoctorJ
Bpipe
Ceylon
CRaSH
CUBA CLI
CXF
Gaiden
Glide
Gradle
Grails
Groovy
GroovyServ
Infrastructor
Java
JBake
Kotlin
kscript
Lazybones
Leiningen
Maven
Micronaut
sbt
Scala
Spark
Spring Boot
Sshoogr
Vert.x
VisualVM
- 安装
- 安装最近稳定版本,例如安装
Java JDK
$ sdk install java
- 安装特定版本
$ sdk install java 10.0.2-oracle
版本可以通过 sdk list java
获取
$ sdk list java
===============================================================
Available Java Versions
===============================================================
12.ea.15-open
11.0.1-open
10.0.2-zulu
10.0.2-open
10.0.2-oracle
9.0.7-zulu
9.0.4-open
8.0.191-oracle
8.0.181-zulu
7.0.181-zulu
1.0.0-rc7-graal
===============================================================
+ - local version
* - installed
> - currently in use
注:命令sdk list
可以列出所有可以安装sdk
- 安装本地版本
# 官网栗子
$ sdk install groovy 3.0.0-SNAPSHOT /path/to/groovy-3.0.0-SNAPSHOT
例如,我本地已经安装了Java8版本,我可以这样操作(mac系统):
$ sdk install java java8 /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
# 查看安装结果
sdk list java
=================================================================
Available Java Versions
=================================================================
+ java8
12.ea.15-open
11.0.1-open
10.0.2-zulu
10.0.2-open
> * 10.0.2-oracle
9.0.7-zulu
9.0.4-open
8.0.191-oracle
8.0.181-zulu
7.0.181-zulu
1.0.0-rc7-graal
=================================================================
+ - local version
* - installed
> - currently in use
# 查看版本
$ java -version
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
$ sdk use java java8
Using java version java8 in this shell.
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
- 移除安装的版本
sdk uninstall java 10.0.2-oracle
- 选择版本
# 重要的是要意识到这只会切换当前shell的候选版本。要使此更改永久性,请使用默认命令。
sdk use java 8.0.191-oracle
- 默认版本
# 这将确保所有后续shell都将从8.0.191-oracle版本开始使用。
sdk default java 8.0.191-oracle
- More操作参考官网
五. 原理
查看sdkman安装目录结构(默认在~/.sdkman
下)
sdkman采用一系列脚本来注册sdk相关命令,在系统中通过sdkman安装某candidate,它的安装主要依赖sdkman-install.sh(看上图)来实现的,依次下载了candidate的zip压缩包及安装脚本,再通过脚本来执行安装流程,本质上是与正常的unix安装流程是一样的。下载的组件分别至于archive及temp目录下,安装的组件在candidates目录下,可以看到默认的current为指向某一版本的软链接
drwxr-xr-x 11 ishiv staff 352B 10 20 12:33 10.0.2-oracle
lrwxr-xr-x 1 ishiv staff 42B 10 20 03:34 current -> /Users/ishiv/.sdkman/candidates/java/java8
lrwxr-xr-x 1 ishiv staff 64B 10 20 03:19 java8 -> /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
查看``.bash_profile文件,
cat ~/.bash_profile `,可以看到追加了一些脚本
export PATH=$PATH:/usr/local/mysql/bin
export PATH=$PATH:/Users/ishiv/software/apache-maven-3.5.4/bin
#下面这一段是由于安装sdkman后自动追加的
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/ishiv/.sdkman"
[[ -s "/Users/ishiv/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/ishiv/.sdkman/bin/sdkman-init.sh"
每次启动shell环境,都会预先加载 .bash_profile 等文件中的环境,这样就可以直接使用~/.sdkman中的sdk环境了。