SDKMAN!

概述

官网,SDKMAN是一款管理多版本SDK的工具,可以实现在多个版本间的快速切换。

其他特性:

  • 易用:安装SDK不再需要去Google想安装的某个软件的官网的下载页,或找其他下载页面,然后下载安装包、解压、设置环境变量等等繁琐操作
  • 多平台:支持包括Windows在内的所有主要操作系统:Mac OSX,Linux,Cygwin,Solaris和FreeBSD。在Windows安装时,需要一个Shell执行环境,可使用Git Bash(应该没有哪个开发者说TA没安装好Git)、PowerShell(系统自带,界面不太好看)、PowerShell Core(需要手动安装)、WSL(Windows Subsystem for Linux)等。
  • 全套JAVA支持:提供Java,Groovy,Scala,Kotlin和Ceylon等JVM工具包。 Ant,Gradle,Grails,Maven,SBT,Spark,Spring Boot,Vert.x等框架或工具集。
  • API:使用开放的Broker REST API可以轻松地编写新的客户端,供应商可以通过安全的供应商API发布自己的版本。
  • 轻量:只需要unzip、zip、curl、sed四个依赖命令(安装过程会检查这些依赖命令工具集,如果没有会提示安装),就可以在bash中通过命令使用,还可和ZSH一起使用。

安装

Mac安装SDKMAN!,安装成功后即可使用sdk命令:

curl -s "https://get.sdkman.io" | bash
# 根据提示执行
source "/Users/johnny/.sdkman/bin/sdkman-init.sh"
# 验证
sdk version

安装过程中的部分输出:

Looking for a previous installation of SDKMAN...
Looking for unzip...
Looking for zip...
Looking for curl...
Looking for sed...
Set version to 5.18.2 ...
Set native version to 0.4.6 ...
Attempt update of login bash profile on OSX...
Added sdkman init snippet to /Users/johnny/.bash_profile
Attempt update of zsh profile...
Updated existing /Users/johnny/.zshrc
You are subscribed to the STABLE channel.
Please open a new terminal, or run the following in the existing one:
    source "/Users/johnny/.sdkman/bin/sdkman-init.sh"

打开~/.bash_profile文件看看cat ~/.bash_profile

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

可知是把sdkman-init.sh脚本追加到~/.bash_profile,关于此脚本,后文再谈。

输入命令sdk list jdk报错提示:Stop! jdk is not a valid candidate.

Candidate是SDKMAN!使用的一个概念,输入sdk list列举所有的Candidate,输出省略。比如java就是一个Candidate,jdk则不是。

sdk list输出的文本过长,需要翻页才能找到想要查看的内容。此时可以考虑使用管道符。sdk当然也支持grep过滤:sdk list | grep neo4j,输出:

Neo4j-Migrations (2.10.0)   https://neo4j.com/labs/neo4j-migrations/
										$ sdk install neo4jmigrations

列出可用的Java版本:sdk list java,输出(省略大段内容):

Available Java Versions for macOS ARM 64bit
=============================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------     
 Gluon         |     | 22.1.0.1.r17 | gln     |            | 22.1.0.1.r17-gln
 GraalVM CE    |     | 22           | graalce |            | 22-graalce
               |     | 22.0.1       | graalce |            | 22.0.1-graalce

第一列Vendor表示发行商,这里有我们最熟悉的Oracle、Zulu(即OpenJDK),还有JetBrains、GraalVM等。Version是大版本号,和目前JDK的发行版本号规则一致;每年发布2次,每半年发布一次,分别是3月和9月。最后一列Identifier是全局唯一标志符。通过Identifier来指定想要安装的某个Candidate的某个发行商的某个版本。

安装命令:sdk install <candidate> <Identifier>。比如想安装GraalVM这种JDK:sdk install java 22.0.1-graalce

不同Candidate,其sdk list输出不尽相同,如sdk list maven输出就很精简,只有一个版本号,安装maven:sdk install maven 3.9.6,输出:

Downloading: maven 3.9.6
In progress...
###################### 100.0%
Installing: maven 3.9.6
Done installing!
Setting maven 3.9.6 as default.

再安装另一个版本的maven:sdk install maven 3.8.1,输出:

省略同上类似文本
Setting maven 3.8.1 as default.

也就是说,后安装的maven,会作为生效的,使用中的版本,即default

默认情况下,sdkman安装在目录~/.sdkman/下。打开此隐藏目录open ~/.sdkman/,会发现有个candidatescandidates目录下有刚安装的maven:
在这里插入图片描述
会发现maven下除了已经安装的两个版本的文件夹外,还有个current目录,并且是个软链接。再细心看,得知其标题是3.8.1,也就是说current指向3.8.1文件夹,因为后执行命令安装此版本。通过ls命令验证一下:
在这里插入图片描述
切换到maven 3.9.6版本:sdk default maven 3.9.6,输出setting maven 3.9.6 as the default version for all shells.。再次查看Finder窗口或ls命令可得到验证,略。用mvn -v命令来验证,输出:

Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /Users/johnny/.sdkman/candidates/maven/current
Java version: 17.0.10, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "13.0", arch: "aarch64", family: "mac"

sdk default的设置是全局生效的。

如果不想设置默认版本(全局生效的版本),仅仅是临时使用某个版本,可使用命令:sdk use maven 3.9.6。值得注意的是,这个命令的有效期仅限于此bash会话窗口,即此Shell session。如果在另外一个之前提前打开的bash窗口里执行命令mvn -v,其输出就不一定是3.9.6。

目录

上面的截图显示有如下子目录:

  • bin:仅有一个sdkman-init.sh脚本
  • candidates:安装的软件包
  • contrib:提供bash completion补全功能
  • etc:仅有一个config文件,配置文件
  • ext:空,暂时没用到
  • libexec:包含version、default、help、home、uninstall5个命令
  • src:存放sh脚本文件,
  • tmp:临时目录
  • var:

卸载

卸载软件包

执行命令sdk uninstall maven 3.8.1即可。

卸载sdkman

上面提到,sdkman所有软件都安装在隐藏文件夹~/.sdkman下,因此卸载命令可以是简单的删除并清空rm -rf ~/.sdkman

如果需要备份,则可以执行命令tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/.sdkman

另外,安装过程中把sdkman-init.sh脚本追加到~/.bash_profile文件。卸载时,也最好更新一下~/.bash_profile文件。

其他

命令

查看当前使用的版本:sdk current java
升级某个软件包,意义不大:sdk upgrade maven
升级SDKMAN!:sdk selfupdate
强制重新安装:sdk selfupdate force

离线模式

当电脑没有网时,离线模式会进行自动切换。支持手动切换:

sdk offline enable
sdk offline disable

Beta channel

上面的安装过程中的输出显示You are subscribed to the STABLE channel.我们使用的是稳定版本。查看官网得知还有一个Bate版,包含cli一些可能不稳定的新功能,如果想使用Bate版本,需修改~/.sdkman/etc/config文件:sdkman_beta_channel=true。然后打开一个终端执行:sdk selfupdate force

参考

  • 官网

相关推荐

  1. <span style='color:red;'>SDKMAN</span>!

    SDKMAN!

    2024-05-01 22:04:03      11 阅读
  2. SDKMAN的安装与卸载

    2024-05-01 22:04:03       37 阅读
  3. How to build a localized sdkman mirror service

    2024-05-01 22:04:03       22 阅读
  4. 通过SDKMan来安装各种版本的JDK

    2024-05-01 22:04:03       11 阅读
  5. 【bug】在 Windows 上安装 SDKMAN! 的完整指南

    2024-05-01 22:04:03       12 阅读

最近更新

  1. docker run enteypoint怎么样使用呢?

    2024-05-01 22:04:03       0 阅读
  2. kafka中

    kafka中

    2024-05-01 22:04:03      0 阅读
  3. 探索Vue.js:构建高效前端应用的现代框架

    2024-05-01 22:04:03       0 阅读
  4. ffmpeg 获取视频时长的命令及其输出

    2024-05-01 22:04:03       0 阅读
  5. 使用Python绘制甘特图

    2024-05-01 22:04:03       0 阅读
  6. uboot spi nor flash初始化相关的阅读分析(一)

    2024-05-01 22:04:03       0 阅读
  7. 最小生成树(算法篇)

    2024-05-01 22:04:03       0 阅读
  8. K8S集群应用国产信创适配实战经验总结

    2024-05-01 22:04:03       0 阅读
  9. 方程与不等式

    2024-05-01 22:04:03       0 阅读
  10. 力扣1472.设计浏览器历史记录

    2024-05-01 22:04:03       1 阅读
  11. ArcGIS Pro SDK (八)地理数据库 3 数据

    2024-05-01 22:04:03       1 阅读
  12. C语言 找出一个二维数组中的鞍点

    2024-05-01 22:04:03       1 阅读

热门阅读

  1. MyBatis笔记——MyBatis缓存

    2024-05-01 22:04:03       12 阅读
  2. 【笔试题汇总】华为春招笔试题解 2024-4-17

    2024-05-01 22:04:03       12 阅读
  3. multimac实践

    2024-05-01 22:04:03       11 阅读
  4. 2024-04-30 区块链-以太坊-相关文档

    2024-05-01 22:04:03       13 阅读
  5. 速盾:什么是cdn架构

    2024-05-01 22:04:03       10 阅读
  6. git生成及应用补丁

    2024-05-01 22:04:03       13 阅读
  7. ⑤ - 前端工程师通识指南

    2024-05-01 22:04:03       16 阅读
  8. 【python】给函数参数和返回值标注类型

    2024-05-01 22:04:03       14 阅读