前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

SDKMAN!

原创
作者头像
johnny666
修改2024-09-19 10:55:12
290
修改2024-09-19 10:55:12
举报
文章被收录于专栏:Java

概述

官网,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命令:

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

安装过程中的部分输出:

代码语言:sh
复制
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

代码语言:sh
复制
#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,输出:

代码语言:sh
复制
Neo4j-Migrations (2.10.0)   https://neo4j.com/labs/neo4j-migrations/
										$ sdk install neo4jmigrations

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

代码语言:sh
复制
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,输出:

代码语言:sh
复制
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,输出:

代码语言:sh
复制
省略同上类似文本
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命令来验证,输出:

代码语言:sh
复制
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

离线模式

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

代码语言:sh
复制
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

参考

  • 官网

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 安装
      • 目录
        • 卸载
          • 卸载软件包
          • 卸载sdkman
        • 其他
          • 命令
          • 离线模式
          • Beta channel
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档