用sdkman管理多个jdk切换

news2024/12/27 15:34:03
  • 前言

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

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

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

  1. (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-zulu17.0.12-zulu21.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烦恼的你!

参考文章:

怎样在Windows系统运用SDKMAN实现JDK的版本轻松管理_sdkman如何管理windows下已提前安装好的jdk-CSDN博客

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

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

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

相关文章

十分钟掌握Ajax(jQuery封装的ajax)

Ajax是一种异步(无需等待服务器返回数据就可以做别的工作)无刷新(做了一些操作之后,页面不会刷新)技术,通常结合DOM一起操作。(不像超链接和表单一样一点就刷新) Jquery封装好的Ajax技术有四种&#xff0c…

苹果开源Depth Pro:0.3秒实现从2D图像到3D深度图的革命性突破

前沿科技速递🚀 近日,苹果公司的AI研究团队震撼推出了一项划时代的技术——Depth Pro。这一技术能够在0.3秒内从单一的2D图像中生成高精度的3D深度图,突破了单目深度估计技术的极限。这项创新将为智能设备和计算机视觉领域带来全新的应用可能…

JavaWeb合集11-Maven高级

十一、Maven高级 1、分模块设计与开发 为什么?将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。 实现步骤&…

mqtt与云服务器

mqtt 目录 mqtt 回顾 云服务器的操作 MQTT协议 -- 将官方库移植到工程 -- 应用 -- 可能会出现的问题: 完整代码 回顾 -- 昨天我们写的AT指令是直接写在main中,在while循环的外面,没有很好的封装,所以今天我们写一个函数…

jeecg3版本的vue,离线启动

jeecg的vue2版本已经停止维护,所以只能用vue3的版本。3版本中使用的是pnpm(npm的增强版本)下载依赖。使用pnpm安装的node_modules,不能直接复制到离线主机中(因为在 pnpm安装过程中,会给依赖的配置文件写死…

qt页面设计

1. Designer 设计师(掌握) Designer是Qt内置的一款界面设计程序,设计的界面文件为.ui格式。 C程序员通常不会单独启动Designer,如果要在项目中使用Designer程序,只需要在新建项目时,勾选“创建界面文件”选…

基于Springboot+Vue的特殊儿童家长教育能力提升平台 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

《数据结构》课程综合设计(zzu校园导航)(迪杰斯特拉算法)

一、系统(问题)描述 目前根据郑州大学主校区面积区域的广大,以及南、北核心教学楼的教室分布密集且较多;另外,多数地图软件无法精细导航到一个具体的地点,容易造成原地转圈的烦恼。但是,我们转…

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

Ubuntu22.04虚拟机安装

一、安装介质下载&#xff1a; 在官网下载安装镜像&#xff0c;下载地址https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso 二、操作系统安装&#xff1a; step 1:进入ubuntu的安装界面&#xff0c;直接回车安装。 step 2:选择语言&#xff0c;直接回…

pycharm 找不到conda环境

参考&#xff1a;新版Pycharm解决Conda executable is not found-CSDN博客

软件界面设计深度解析:流程、工具与用户体验

1、什么是软件界面 软件界面设计是指对软件的外观和用户体验进行美化、优化和标准化的过程。这包括软件的启动封面、框架、菜单、标签、安装过程、滚动条、状态栏、面板、图标设计&#xff0c;以及软件的包装和商业化设计。简单来说&#xff0c;我们日常使用微信时所看到的聊天…

天锐绿盾VS Ping32数据安全新选择,用户体验分享

随着网络威胁日益严重&#xff0c;如何保护个人和企业的网络安全成为了一个迫在眉睫的问题。天锐绿盾和Ping32作为市场上两款备受欢迎的网络安全软件&#xff0c;各自拥有独特的特点和功能。本文将对这两款软件进行深入的使用体验分享&#xff0c;帮助用户做出最佳选择。 防护性…

C++ 11 的 codecvt 与编码转换

1 编码与乱码 乱码产生的主要原因是编码与字符集不匹配&#xff0c;这种不匹配时怎么造成的呢&#xff1f;首先要来了解一下编码和字符集的关系。 1.1 编码与字符集 由于标准的英文 ASCII 已经成了全球标准&#xff0c;每台电脑的 BIOS 里存着一份标准 ASCII 表&#xff08;…

ES6扩展运算符

1.介绍&#xff1a; ... 扩展运算符能将数组转换为逗号分隔的参数序列&#xff1b; 扩展运算符&#xff08;spread&#xff09;也是三个点&#xff08;...&#xff09;。它好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的 参数序列&#xff0c;对数组进…

IP数据包格式、ICMP封装步骤

IP数据包格式 版本号&#xff1a;占4位&#xff0c;表示IP协议的版本&#xff0c;目前广泛使用的是IPv4&#xff0c;其版本号为4。 首部长度&#xff1a;占4位&#xff0c;表示IP首部的长度&#xff0c;单位为32位字节。首部长度最小为20字节&#xff0c;最大为60字节。 服务…

2.Java--入门程序

一、开发Java程序 步骤&#xff1a; 1.编写代码 其中第一行的HelloWorld叫类名&#xff0c;下面的框架叫main()方法&#xff0c; 类名要和文件名一致&#xff0c; 2.编译代码 用Javac进行编译&#xff0c;将编写的代码保存之后&#xff0c;打开WindowsR输入cmd 用cd文件夹…

40系显卡配置Apollo9.0

文章目录 一、下载安装 Apollo 源码1. 克隆 Apollo 源码 二、 启动Apollo环境容器三、 进入Apollo环境四、编译五、启动 Apollo 进行播包验证5.1 获取数据包5.2 启动 Dreamview5.3 在 Dreamview 中播放数据包5.4 通过命令行播放数据包 宿主机基础环境 系统&#xff1a;ubuntu22…

关键词提取技术:TextRank 详解

1. 什么是 TextRank&#xff1f; TextRank 是一种基于图的排序算法&#xff0c;用于从文本中提取关键词和进行自动摘要。它是受 Google 的 PageRank 算法启发而提出的。与 TF-IDF 不同&#xff0c;TextRank 不依赖外部语料库&#xff0c;也不需要训练数据。它通过构建词语之间的…

JavaWeb合集06-MySQL数据库

六、MySQL数据库 关系型数据库(RDBMS)&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; 使用表存储数据&#xff0c;格式统一, 便于维护. 使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便&#xff0c;可用于复杂…