SDKMAN!

news2024/11/18 5:26:50

概述

官网,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

参考

  • 官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1637341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apollo Dreamview+之播放离线数据包

前提条件 完成 Dreamview 插件安装&#xff0c;参见 Studio 插件安装 。 操作步骤 您可以通过包管理和源码两种方式快速体验离线数据包播放操作。其中进入 docker 环境和启动 dreamview 的命令有所区别&#xff0c;请您按照命令进行操作。 步骤一&#xff1a;启动并打开 Dr…

踏上R语言之旅:解锁数据世界的神秘密码(三)

多元相关与回归分析及R使用 文章目录 多元相关与回归分析及R使用一.变量间的关系分析1.两变量线性相关系数的计算2.相关系数的假设检验 二.一元线性回归分析的R计算三、回归系数的假设检验总结 一.变量间的关系分析 变量间的关系及分析方法如下&#xff1a; 1.两变量线性相关…

openlayer 使用ol-ext插件实现凸显区域

使用ol-ext插件实现凸显多变形 效果如图 1、创建openlayer var map; var view; var tileLayer, source, vector;function init() {tileLayer new ol.layer.Tile({source: new ol.source.TileArcGISRest({url: "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStr…

java 远程debug

java -agentlib:jdwptransportdt_socket,servery,suspendn,address50050 -Xmx1536m -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./ -jar ${JAR_NAME} >/dev/null 2>&1 &参数说明 -agentlib:jdwptransportdt_socket,servery,suspendn,address50050: 这个参数…

Linux:使用匿名管道对进程池的模拟实现

目录 一、Makefile 二、processpool.cc 2.1创建通信管道和子进程 2.2控制子进程 2.3回收进程 三、task.hpp 四、完整代码 接下来我们将模拟实现一个进程池&#xff0c;进程池广泛应用与各个领域和方向&#xff0c;比如我们打开电脑后同时打开很多个进程&#xff08;也就是软…

python公务用车医院校园企业车辆管理系统

本 Python版本&#xff1a;python3.7 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask都有,都支持 后端&#xff1a;python 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 公务用车管理智慧云服务监管平台有管理员和用户…

托普利兹矩阵(T矩阵)及其应用(Matlab demo测试)

托普利兹矩阵&#xff08;T矩阵&#xff09;及其应用&#xff08;Matlab demo测试&#xff09; 1. 概念2. Matlab简单测试2.1 生成测试2.2 基本性质及原理2.3 性质验证 3. 其他应用总结3.1 其他性质3.2 文献阅读看到的 参考资料 1. 概念 托普利兹矩阵&#xff0c;简称为T型矩阵…

O2OA开发平台前端源码级二次开发(Vue3,React)

在使用O2OA进行项目定制化开发时&#xff0c;我们可以开发新的前端组件&#xff08;x_component&#xff09;以扩展O2OA来实现更多的业务。这种新增前端组件或者前端业务的开发通常会配合后端自定义应用实现的服务来完成系统内数据的交互。在当系统默认的界面不符合系统UI/UE设…

Sentinel 控制台学习

引言 上篇文章已经讲过 SpringCloud Sentinel集成到微服务项目中&#xff0c;接下来我们继续学习怎么使用sentinel控制台对微服务进行限流&#xff0c;熔断&#xff0c;降级等一系列操作。 控制台 接下来我们单独讲解每一个菜单按钮 实时监控 实时监控&#xff1a; 可以看到…

Leetcode 145:二叉树的后序遍历(迭代法)

给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 思路&#xff1a; 迭代法的思路是&#xff0c;使用栈&#xff0c;一层一层的将树节点遍历入栈。 比如下面这个树&#xff0c;使用迭代法&#xff0c;1&#xff09;第一层&#xff0c;让根节点入栈。2&a…

2024深圳杯数学建模竞赛A题(东三省数学建模竞赛A题):建立火箭残骸音爆多源定位模型

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓&#xff08;浏览器打开&#xff09; https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 2024深圳杯数学建模竞赛A题&#xff08;东三省数学建模竞赛A题&#xff0…

2024五一杯数学建模A题思路分析-钢板最优切割路径问题

文章目录 1 赛题选题分析 2 解题思路3 最新思路更新 1 赛题 A题 钢板最优切割路径问题 提高钢板下料切割过程中的工作效率&#xff0c;是模具加工企业降低成本和增加经济效益的重要途径&#xff0c;其中钢板切割的路径规划是钢板切割过程的一个关键环节。 钢板切割就是使用特殊…

附录6-1 黑马优购项目-组件与过滤器

目录 1 过滤器-格式化价格 2 组件-搜索框 3 组件-数量框 4 组件-商品概况 4.1 格式化价格 4.2 选择性使用勾选框和数量框 4.3 源码 1 过滤器-格式化价格 这个项目中仅用到格式化价格这一种过滤器。过滤器文件位置为store/filter.wxs 文件内容是这样的&#xf…

【嵌入式DIY实例】-植物自动浇水机

DIY自动植物浇水机 文章目录 DIY自动植物浇水机1、硬件准备与接线2、代码实现智能灌溉系统是一种先进的、新技术的灌溉技术,可以减少人力、时间等。在本文中,将介绍如何实现一个植物自动浇水机。通过这个项目,可以给我们身边的一些植物,所有花盆都安装这一系统。这个系统由…

【JavaEE初阶系列】——理解tomcat 带你实现最简单的Servlet的hello world程序(七大步骤)

目录 &#x1f6a9;认识Tomcat &#x1f6a9;运用Tomcat &#x1f6a9;Servlet &#x1f393;完成简单的Servlet的hello world程序 &#x1f388;创建项目Maven &#x1f388;引入依赖 &#x1f388;创建目录 &#x1f388;编写代码 &#x1f388;打包程序 &#x1…

关于用户体验和设计思维

介绍 要开发有效的原型并为用户提供出色的体验&#xff0c;了解用户体验 (UX) 和设计思维的原则至关重要。 用户体验是用户与产品、服务或系统交互并获得相应体验的过程。 设计思维是一种解决问题的方法&#xff0c;侧重于创新和创造。 在启动期实现用户体验和设计思维时&#…

头歌:SparkSQL简单使用

第1关&#xff1a;SparkSQL初识 任务描述 本关任务&#xff1a;编写一个sparksql基础程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1. 什么是SparkSQL 2. 什么是SparkSession。 什么是SparkSQL Spark SQL是用来操作结构化和半结构化数据的接口。…

Tuxera NTFS使用教程 轻松实现磁盘格式转换的教程分享 ntfsMac软件怎么用

NTFS for Mac是Mac电脑里非常重要的工具之一&#xff0c;因为它太实用了&#xff0c;解决了NTFS移动硬盘在Mac上的写入问题。但是&#xff0c;小伙伴在安装完软件之后&#xff0c;通常再也不会关注它&#xff0c;甚至时间长了&#xff0c;也就忘了Mac里还有这么一个软件。 在Tu…

GB32960解析工具

几年前搞了一个用Qt开发的国标32960报文解析工具。分享给大家&#xff0c;只用1积分便可以下载。 国标32960新能源车协议解析工具资源-CSDN文库

(附源码)超级简单的SSM图书交易系统,包含技术栈、架构图、设计图、教程

先看首页效果&#xff0c;包含买家、卖家、管理员三个端口。启动有问题可以联系我解决&#xff0c;微信&#xff1a;keepgoing4u 架构图&#xff1a; 用到软件 Jdk1.8 Mysql IntelliJ IDEA Maven 项目技术&#xff1a; Spring Boot SSM JSP mybatis Maven B/S模式 配置…