SDKMAN!

ops/2024/9/22 13:06:59/

概述

官网,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-glnGraalVM 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_111">卸载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

参考

  • 官网

http://www.ppmy.cn/ops/26114.html

相关文章

C# 读去Word文档(NPOI)

NPOI.dll文件下载&#xff1a; 百度网盘 请输入提取码 NPOI介绍&#xff1a; NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。 NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。 实现的操作&#xff1a; 获取Word文档所有Sheet表格。 读…

【Spring】4.Spring的事务管理解析

什么是事务 事务是数据库管理系统中的一个关键概念&#xff0c;用于确保数据的完整性和可靠性。在Spring框架中&#xff0c;事务通常指的是一段代码&#xff0c;这段代码要么完全执行&#xff0c;要么完全不执行&#xff0c;不会出现部分执行的情况。 Spring提供了事务管理的机…

初学React基础

最近准备跟着黑马React学一下React&#xff0c;扩充一下技术面&#xff0c;打算还是以一边学习一边记笔记为主&#xff0c;进行学习&#xff01; 1. React介绍 1.1. React是什么&#xff1f; React是由FaceBook现在称&#xff08;Meta&#xff09;开发的开源 JavaScript 库&a…

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像

基于EBAZ4205矿板的图像处理&#xff1a;03使用VIO调试输出HDMI视频图像 在zynq调试时VIO是真的方便&#xff0c;特此写一篇博客记录一下 先看效果 项目简介 下面是我的BD设计&#xff0c;vtc用于生成时序&#xff0c;注意&#xff0c;2021.2的vivado的vtcIP是v6.2版本&…

SQLite如何处理CSV 虚拟表(三十七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite的DBSTAT 虚拟表&#xff08;三十六&#xff09; 下一篇:SQLite的扩展函数Carray()表值函数(三十八) ​ RFC4180格式是一种文本文件格式&#xff0c;被用于表格数据间的交互&#xff0c;也可将表格数据转化…

python挑战10秒小程序

目录 一.前言 二.代码 三.分析 一.前言 >1.小程序开始时,会出现一个倒计时器,从10秒开始。 >2.玩家需要集中注意力并估计10秒钟过去的时间。 >3.当玩家认为10秒钟已经过去时,需要点击屏幕上的按钮。 >4.小程序会显示玩家的点击时间,以及与实际10秒钟的时间…

RS0108YQ20功能和参数介绍及高速数据传输中的优势

RS0108YQ20功能和参数介绍及高速数据传输中的优势-公司新闻-配芯易-深圳市亚泰盈科电子有限公司 RS0108YQ20是一款电平转换器&#xff0c;也称为电平移位器&#xff0c;它的主要功能是在不同的电源电压或逻辑电平之间提供双向信号转换。以下是RS0108YQ20的一些关键参数和功能特…

二叉树:数据结构的分形之美

1.树形结构 1.1概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0)个有限结点组成一个具有层次关系的集合。把他叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就说它的根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 有一个特殊的节点&#xff0…