首页 > 其他分享 >用sdkman管理多个jdk切换

用sdkman管理多个jdk切换

时间:2024-10-13 15:49:00浏览次数:7  
标签:bin java jdk 切换 sdkman HOME 安装 sdk

前言

最近项目前后端进行升级,需要在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

标签:bin,java,jdk,切换,sdkman,HOME,安装,sdk
From: https://www.cnblogs.com/chaiwangbing/p/18462457

相关文章

  • 包解决!Android Studio报错:Duplicate class kotlin.collections.jdk8.CollectionsJDK8K
    Executionfailedfortask':app:checkDebugDuplicateClasses'.>Afailureoccurredwhileexecutingcom.android.build.gradle.internal.tasks.CheckDuplicatesRunnable>Duplicateclasskotlin.collections.jdk8.CollectionsJDK8Ktfoundinmodul......
  • idea如何通过不同jdk版本进行打包
    本地安装的jdk版本是11,有个项目想打包成jdk1.8的版本,试了好多方法还是不得行,本来是以为修改ProjectStructure里面修改SDK的jdk版本就可以,试了不行最后面发现,这个的打包方式是采用maven的setting.xml里面制定的JDK版本有关 最后修改了,maven制定的setting.xml里面的jdk配置,从J......
  • 进程的调度和切换
    目录1.进程的调度和切换的基本概念2.其他概念3.进程切换的时候,CPU和进程的操作3.1CPU基本概念4.Linux2.6内核进程调度队列1.进程的调度和切换的基本概念进程在CPU上运行的时候,CPU并不会一直运行一个进程,直到进程结束。现代操作系统的进程之间都是根据时间片进行轮转......
  • 电脑快速切换IP地址命令是什么?详解与实践
    有时,出于安全考虑或测试需要,我们可能需要快速切换电脑的IP地址。虽然这一过程在初学者看来可能略显复杂,但通过简单的命令和步骤,即使是普通用户也能轻松实现。本文将详细介绍在Windows系统中快速切换IP地址的几种方法,特别是通过命令提示符来执行的操作。一、IP地址与网络环境......
  • JDK配置环境变量
    JDK下载官网:JavaDownloads|Oracle一、前期准备1.在官方网站中下载好你需要的版本,这里我下载的是JDK21,看自己的电脑系统是什么,我这里是Windows系统。二、安装三、配置变量在系统中找到高级系统设置,点击环境变量1.在系统变量中新建CLASSPATH变量名:CLASSPATH变......
  • Idea android应用kotlin-stdlib-1.8.20 kotlin-stdlib-jdk81.6.21冲突
    Ideaandroid应用kotlin-stdlib-1.8.20kotlin-stdlib-jdk81.6.21冲突idea中开发android应用,安装android插件后,新建项目,然后各种包更新,最后运行时提示kotlin-stdlib-1.8.20kotlin-stdlib-jdk8:1.6.21冲突错误如下:FAILURE:Buildfailedwithanexception.Whatwentwrong:......
  • Win10 小技巧:切换大小写自动提示音
    在Win10里,我们可以给CapsLock键、NumLock键设置提示音,及时了解输入法状态。‍如何设置按下「Win+I」打开设置,然后搜索「切换」,然后点击「打开粘滞键、切换键、或筛选键时显示消息」:​‍‍然后开启:​‍‍这样按CapsLock键时会播放声音。此外声音是不同:切换......
  • Java中的专有名词——JVM、JRE、JDK到底是什么关系
            相信刚开始学习Java的同学一定见过“JVM、JDK、JRE”这三个专有名词,那他们到底代表的是什么,三者之间又有何种关系呢?        下面我们先来介绍一下三者:1.JVM    JVM:Java虚拟机(JavaVirtualMachine,JVM)是运行Java字节码的虚拟机。JVM有......
  • 配置JDK环境变量
    1.打开JDK的包,复制路径(比如我的就是D:\jdk-11)如果此时文件夹中没有jre,可以自动生成:直接点击当前路径输入cmd,点击回车,然后输入以下代码点击回车即可bin\jlink.exe--module-pathjmods--add-modulesjava.desktop--outputjre2.右键此电脑->属性->高级系统设置->环境......
  • 实现网站颜色主题切换方案
    1.html上面挂载属性data-theme切换主题事件:toggleTheme(dark:boolean){if(dark){this.theme='dark';window.document.documentElement.setAttribute('data-theme','dark');}else{this.theme='light';......