前言

最近项目前后端进行升级,需要在jdk8和jdk17两个版本切换。最简单的是通过手动切换,但切换过程太繁琐,修改环境变量,达到切换目的。于是尝试其它解决方案,最终确实使用sdkman工具。

sdkman 是一款面向Java开发者的命令行工具,旨在简化操作系统上SDKs的管理。支持跨平台使用,提供便捷的版本控制和切换功能,通过维护候选SDK列表,让用户能够轻松安装、更新和卸载各类软件开发工具包。

下面详细介绍windows下和linux下安装过程。

(1)、Windows 安装

目前 Windows 有两种安装方式,WSL 和 Git Bash 的方式,Git 大家电脑中应该都有安装,因此下面基于 Git Bash 进行安装 sdkman 。

1、安装前准备:首先安装 sdkman 会使用到 unzip、zip、curl、sed 命令, Git缺少 zip :

zip -v

如果未找到,下载 zip 包:

https://sourceforge.net/projects/gnuwin32/files/zip/3.0/

下载后,将解压后 bin 目录下的 zip.exe 拷贝到 Git 安装目录下 mingw64/bin 目录下:

同时 zip 还依赖 bzip2 ,因此还要下载 bzip2 包:

https://sourceforge.net/projects/gnuwin32/files/bzip2/1.0.5/

下载后,将解压后 bin 目录下的 bzip2.dll 拷贝到 Git 安装目录下 mingw64/bin 目录下:

然后再次尝试 zip 命令,可以看到已经可以了:

2、安装sdkman:接下来下载安装 sdkman ,在 Git Bash 中执行如下操作:

curl -s "https://get.sdkman.io" | bash

安装完成后,将 sdkman 添加到环境变量中:

source "$HOME/.sdkman/bin/sdkman-init.sh"

每次启动终端时自动加载 sdkman,将以下行添加到.zshrc文件中:

echo 'source "$HOME/.sdkman/bin/sdkman-init.sh"' >> ~/.zshrc

重新加载 .zshrc:

source ~/.zshrc

验证环境:

sdk version

3、sdkman 使用

3.1 查看所有可用的SDK

sdk list

可以看到非常多的应用,而不限于 JDK 。

3.2 查看所有指定类型可用的SDK:

sdk list java

3.3 安装指定类型版本的SDK:

sdk install java 21.0.2-open

3.4 切换并使用指定类型版本的SDK

sdk use java 21.0.2-open

验证 java 版本:

java --version

3.5 设置默认版本

sdk default java 21.0.2-open

3.6 查看当前使用的 SDK

sdk current

3.7 查看当前使用的指定类型的 SDK

sdk current java

3.8 查看 SDK 安装目录

sdk home java 21.0.2-open

3.8 卸载指定类型版本的SDK

sdk uninstall java 21.0.2-open

3.9 升级 sdkman

sdk selfupdate

(2)、Linux下安装sdkman

和Windows下安装过程是一样的,linux系统默认缺少一些命令,我们需要提前安装好。

2.1.需要安装curl,unzip,zip

sudo apt-get install curl

sudo apt-get install unzip

sudo apt-get install zip

2.2安装sdkman

curl -s "https://get.sdkman.io" | bash

2.3安装完成后执行

source "$HOME/.sdkman/bin/sdkman-init.sh"

2.4验证

sdk version

sdkman会自动为设置相应的环境变量。如果想确保在所有终端会话中都使用 sdkman设置的 Java 版本,可以手动设置 JAVA_HOME 环境变量。在 .zshrc 文件中添加以下行:

export JAVA_HOME="$HOME/.sdkman/candidates/java/current"

export PATH="$JAVA_HOME/bin:$PATH"

重新加载 .zshrc:

source ~/.zshrc

(3)、常见问题:

cmd命令窗口直接java -version 找不到命令,需要在环境变量设置路径:

JDK安装路径默认情况下在$HOME/.sdkman/candidates/java/current/bin,具体路径可以通过命令在 Git Bash 中查看:

echo "$HOME/.sdkman/candidates/java/current/bin"

/c/Users/XXX/.sdkman/candidates/java/current/bin

注:XXX是你的用户名

3.1配置环境变量 

操作步骤:我的电脑-》右键属性-》高级系统设置-》环境变量-》系统环境-》系统变量:

添加: JAVA_HOME:C:\Users\Administrator\.sdkman\candidates\java\current

Path 中添加:%JAVA_HOME%\bin

3.2验证是否生效

打开终端,输入java -version ,验证是否是自己刚刚安装的版本

java -version

(4)、卸载 sdkman

4.1. 删除 sdkman 目录

删除 sdkman 安装目录:

rm -rf ~/.sdkman

4.2. 移除配置文件中的 sdkman 配置

编辑的 shell 配置文件(例如 .zshrc),删除与 sdkman 相关的行:

nano ~/.zshrc

找到并删除以下行:

source "$HOME/.sdkman/bin/sdkman-init.sh"

export JAVA_HOME="$HOME/.sdkman/candidates/java/current"

export PATH="$JAVA_HOME/bin:$PATH"

保存并退出(在 nano 中使用 Ctrl+X 然后按 Y 确认保存)。

 4.3.重新加载 shell 配置文件

删除配置行后,重新加载 shell 配置文件:

source ~/.zshrc

(5)、jdk版本选择

Jdk list java 列出来的jdk版本,都是在openJdk上扩展的,基本功能都差不多,根据需要自行下载,目前在开发过程中主要用到的是jdk8、jdk17、jdk21等,比如在本人电脑上安装了这三个版本:8.0.422-zulu、17.0.12-zulu、21.0.2-open。

切换到21,需要执行下面两个命令:

sdk use java 21.0.2-open

sdk default java 21.0.2-open

下载安装包在:C:\Users\Administrator\.sdkman\tmp目录下

安装位置:C:\Users\Administrator\.sdkman\candidates\java目录下

Current是当前使用的jdk。

提示:刚开始安装sdkman选择d盘指定目录,但zshrc文件修改配置不行,折腾半天,最后还是换回了默认路径。不知道为什么,没再研究.....

(6)、idea配置

注意:Idea中配置jdk,和手动安装的设置一样,设置成current目录不行,切换后,无法自动切换。所以如果需要在各个jdk版本间切换,最好在sdk中都选择上,sdkman切换后,idea手动再选择下:

Sdks都添加上:

Project中指定当前使用中的jdk:

启动入口,jdk如果没有改过来,也需要手动切换下:

至此,安装sdkman管理多个jdk版本,并在idea中使用过程就完结了。

在安装过程中,可能会碰到其它问题,系统环境不同,问题都可能不尽相同,根据不同问题查找解决方案,实现sdkman对jdk管理的目的。

sdkman工具,是非常好用的跨平台管理jdk工具,希望能帮助到切换jdk烦恼的你!

参考文章:

https://blog.csdn.net/crazywkl/article/details/142353085

https://blog.csdn.net/qq_43692950/article/details/140816049

用sdkman管理多个jdk切换的更多相关文章

  1. 兼容性测试中如何切换和管理多个JDK版本

    本文由作者邹珍珍授权网易云社区发布. 一.测试背景: 项目对外提供JAR包,需要测试该JAR包对不同JDK版本(1.6至1.9版本)的兼容性.下面主要介绍在兼容性测试中,JDK多版本共存时如何配置环境 ...

  2. java中的jdk切换(无需卸载原有jdk)

    该转自 :  http://blog.csdn.net/u010011371/article/details/50749954 很好的一片文章,适合我这种小白,方便以后使用. 之前一直使用的是JDK1 ...

  3. 【前端开发】nrm切换淘宝镜像&nvm管理node版本及切换

    说明:nrm是切换淘宝镜像用的,nvm是node的版本切换用的(可在自己电脑安装多个版本node,便于不同项目的支持) 一.nrm的安装及常见命令: 安装nrmnpm install -g nrm 查 ...

  4. Mac 常用配置(JDK切换,ll命令设置)

    打开 /Users/用户/.bash_profile文件 1.JDK切换,添加如下内容 export JAVA_6_HOME=`/usr/libexec/java_home -v 1.6` # 设置 ...

  5. Win10环境下多JDK切换以及could not find java.dll异常解决

    备注:主要为JDK1.7和JDK1.8之间进行切换 1.每次进行JDK切换时,都需要修改JAVA_HOME 2.编辑path环境变量,如图所示,将%JAVA_HOME%\jre\bin和%JAVA_H ...

  6. windows下使用批处理脚本实现多个版本的JDK切换

    一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所 ...

  7. 转】windows下使用批处理脚本实现多个版本的JDK切换

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/5209386.html 感谢! 一.JDK版本切换批处理脚本 我们平时在window上做开发的时候,可能需要同时开 ...

  8. centos jdk切换

        #这里找下载路径 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html    ...

  9. jdk切换小工具

    今天无意之中看到一个小工具,就是可以自由切换jdk版本!以前每次切换jdk还要去找环境变量找半天,emmm.... 现在我们只需要双击一个xxx.bat的一个批处理文件,就可以自由切换jdk版本,很方 ...

  10. Windows环境下多版本JDK切换

    因为有切换多个版本的JDK需求,但是本机的JDK安装比较混乱(因为不是我最先使用的),所以出现了一些问题在这里记录下.本来我以为只需要修改环境变量中的JAVA_HOME环境路径即可,如果没有配置JAV ...

随机推荐

  1. 【Vue】13 VueRouter Part3 路由守卫

    单页应用中,只存在一个HTML文件,网页的标签,是通过title标签显示的,我们在单页应用中如何修改? JS操作: window.document.title = "标签名称" 也 ...

  2. python数据分析与可视化基础

    一.数据分析介绍:1.数据分析含义:数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用.数据分析是为了提取有用信息和形成 ...

  3. 【转载】 Docker-关于docker cpu的限制后,实际效果的研究

    原文地址: https://zhuanlan.zhihu.com/p/46275332 ================================================== 思考:我们 ...

  4. Jmeter SHA512接口加密测试

    前言:最近,我遇到一些测试接口必须传入经过SHA512加密后的sign签名,并且签名有1小时时间限制,即签名不是一成不变超1小时就会过期,这导致在测试过程中就得频繁手工去更新签名.其实Jmeter是有 ...

  5. FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流

    ​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播.SRT Streamer支持的视频编码包括H264.H265等等,支持的音频编码包括AAC.OP ...

  6. 23 暑假友谊赛 No.4(UKIEPC 2017)

    23 暑假友谊赛 No.4(UKIEPC 2017) Problem A Alien Sunset hh,开始一眼差分,但是写寄了qwq,后来换枚举过了(Orz,但是看学长差分是能做的,我就说嘛,差分 ...

  7. springcloud线上发布超时之grpc

    springcloud线上发布超时系列文章: springcloud线上发布超时之feign(ribbon饥饿加载) springcloud线上发布超时之grpc springcloud线上发布超时方 ...

  8. 9. 从0学ARM Cortex-A9 LED汇编、C语言驱动编写

    0. 前言 一般我们购买一个开发板,厂家都会给出对应的电路图文件,我们可以通过搜索对应名称来查找到对应的外设.对于驱动工程师来说,我们只需要知道外设与SOC交互的一些数据线和信号线即可. 用主控芯片控 ...

  9. 【团队建设】如何做好团队开发中的 CodeReview(代码评审)?

    目录 前言 一.为什么要做 二.有哪些好处 三.具体怎么做 3.1评审条件 3.2评审重点 3.3评审形式 四.还可以怎么做 4.1提出亮点 4.2轮流评审 4.2文档沉淀 五.文章小结 前言 你是否 ...

  10. [rCore学习笔记 025]分时多任务系统与抢占式调度

    写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 本节重 ...