在linux上用SDKMan对Java进行多版本管理

有一个工具叫SDKMan,它允许我们这样做。官方网站这样描述:

TIP: "SDKMan 是一个工具,用于在大多数基于Unix的系统上管理多个软件开发工具包的并行版本。它提供了一个方便的命令行接口(CLI)和API,用于安装、切换、删除和列出候选项。”

使用SDKMan的一些要点如下:

  1. SDKMan是使用bash编写的。它要求curlzip/unzip已经安装在您的系统中。
  2. SDKMan可以运行在任何基于unix的平台上,例如Mac OSX、Linux、Cygwin、Solaris和FreeBSD。
  3. SDKMan可以为JVM安装大约29个软件开发工具包,如Java、Groovy、Scala、Kotlin、Ceylon、Ant、Gradle、Grails、Maven、SBT、Spark、Spring Boot和Vert.x。
  4. 我们不需要担心设置’ HOME ‘和’ PATH '环境变量,因为SDKMan会自动处理它。

所有用户使用同一个SDKMan

修改 /etc/profile 文件
最后面添加:

#wjw_add for global SDKMan
export SDKMAN_DIR="/usr/local/sdkman"
[[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ]] && source "$SDKMAN_DIR/bin/sdkman-init.sh"

执行: source /etc/profile来生效!

下载sdkman:

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

#或者通过代理: curl --proxy http://127.0.0.1:8118 "https://get.sdkman.io" | bash
#或者设置环境变量: export https_proxy=http://127.0.0.1:8118/

激活sdkman:

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

使用SDKMan安装Java

SDKMan支持为JVM安装29个软件开发工具包,例如Java、Groovy、Scala、Kotlin、Ceylon、Ant、Gradle、Grails、Maven、Gradle、SBT、Spark和Spring Boot。我们可以使用sdk list命令获得完整的列表。

命令sdk list java将给我们一个java版本列表,我们可以使用SDKMan安装,如下所示:

$ sdk list java
================================================================================
Available Java Versions
================================================================================
     13.ea.02-open       1.0.0-rc-10-grl                                        
     12.ea.26-open       1.0.0-rc-9-grl                                         
     11.0.2-zulu         1.0.0-rc-8-grl                                         
     11.0.2-open                                                                
     11.0.1-zulufx                                                              
     10.0.2-zulu                                                                
     10.0.2-open                                                                
     9.0.7-zulu                                                                 
     9.0.4-open                                                                 
     8.0.202-amzn                                                               
     8.0.201-zulu                                                               
     8.0.201-oracle                                                             
     8.0.192-zulufx                                                             
     7.0.181-zulu                                                               
     1.0.0-rc-11-grl                                                            
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

现在,假设我们想安装OpenJDK版本的Java v9。然后,我们将在终端中执行下面的命令,该命令还将更新 PATHJAVA_HOME 变量:

$ sdk install java 9.0.4-open

该命令将花费一些时间来执行,因为它将下载JDK到我们机器上,该命令将输出如下内容:

Downloading: java 9.0.4-open
In progress...
######################################################################## 100.0%

Repackaging Java 9.0.4-open...

Done repackaging...
Cleaning up residual files...

Installing: java 9.0.4-open
Done installing!

Setting java 9.0.4-open as default.

现在,如果我们检查Java版本和JAVA_HOME,可以看到Java已经更新到9.0.4

$ java -version
openjdk version "9.0.4"
OpenJDK Runtime Environment (build 9.0.4+11)
OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)

$ echo $JAVA_HOME
/usr/local/sdkman/candidates/java/current

我们可以按照相同的过程来安装上面列表中看到的任何版本。让我们假设要安装Java 11版本。然后,我们可以执行命令:

$ sdk install java 11.0.2-open
Downloading: java 11.0.2-open
In progress...
######################################################################## 100.0%

Repackaging Java 11.0.2-open...

Done repackaging...
Cleaning up residual files...

Installing: java 11.0.2-open
Done installing!

Do you want java 11.0.2-open to be set as default? (Y/n): Y

Setting java 11.0.2-open as default.

现在,如果我们再次检查我们的Java版本和JAVA_HOME,我们可以看到Java已经更新到11.0.2:

$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

$ echo $JAVA_HOME
/usr/local/sdkman/candidates/java/current

WARNING: 注意:有时,您需要关闭并重新打开终端才能看到更改。

将SDKMan指向已安装的现有Java版本

首先,我们需要找出机器上先前已经安装了Java的位置。在我的机器上,它安装在文件夹 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.345.b01-1.el7_9.x86_64下。让我们通过指定本地安装的路径来设置本地版本:

#可是使用find先查找到具体位置,例如: find /usr -name java

sdk install java 8.0.345 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.345.b01-1.el7_9.x86_64

现在,如果我们再次执行sdk list java命令,我们将得到:

================================================================================
Available Java Versions for Linux 64bit
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Corretto      |     | 20           | amzn    |            | 20-amzn             
               |     | 19.0.2       | amzn    |            | 19.0.2-amzn         
               |     | 19.0.1       | amzn    |            | 19.0.1-amzn         
               |     | 17.0.6       | amzn    |            | 17.0.6-amzn         
               |     | 17.0.5       | amzn    |            | 17.0.5-amzn         
               |     | 11.0.18      | amzn    |            | 11.0.18-amzn        
               |     | 11.0.17      | amzn    |            | 11.0.17-amzn        
               |     | 8.0.362      | amzn    |            | 8.0.362-amzn        
               |     | 8.0.352      | amzn    |            | 8.0.352-amzn        
 Dragonwell    |     | 17.0.6       | albba   |            | 17.0.6-albba        
               |     | 17.0.5       | albba   |            | 17.0.5-albba        
               |     | 17.0.4       | albba   |            | 17.0.4-albba        
               | >>> | 11.0.18      | albba   | installed  | 11.0.18-albba       
               |     | 11.0.17      | albba   |            | 11.0.17-albba       
               |     | 11.0.16      | albba   |            | 11.0.16-albba       
               |     | 8.0.362      | albba   |            | 8.0.362-albba       
               |     | 8.0.352      | albba   |            | 8.0.352-albba       
               |     | 8.0.345      | albba   |            | 8.0.345-albba       
 Gluon         |     | 22.1.0.1.r17 | gln     |            | 22.1.0.1.r17-gln    
               |     | 22.1.0.1.r11 | gln     |            | 22.1.0.1.r11-gln    
 Unclassified  |     | 8.0.345      | none    | local only | 8.0.345             
                                                  

================================================================================
>>> - currently in use
================================================================================

我们可以清楚地看到,我们的机器上已经安装了2个JDK,并且JDK 11.0.18-albba目前正在使用。但是,如果我们想在它们之间切换或者安装一个新的,我们可以通过使用**sdk use java <version_which_you_want_to_use>**就能非常容易地做到这一点,如下所示:

使用Java 8

$ sdk use java 8.0.345
Using java version 8.0.345 in this shell.

$ java -version
openjdk version "1.8.0_345"
OpenJDK Runtime Environment (build 1.8.0_345-b01)
OpenJDK 64-Bit Server VM (build 25.345-b01, mixed mode)

使用Java 11

$ sdk use java 11.0.18-albba
Using java version 11.0.18-albba in this shell.

$ java -version
openjdk version "11.0.18.14" 2023-01-17
OpenJDK Runtime Environment (Alibaba Dragonwell Standard Edition)-11.0.18.14+9-GA (build 11.0.18.14+9)
OpenJDK 64-Bit Server VM (Alibaba Dragonwell Standard Edition)-11.0.18.14+9-GA (build 11.0.18.14+9, mixed mode)

TIP: 使用 sdk use 命令只能使您在执行 sdk use 命令的终端shell中使用指定版本的JDK。如果您关闭终端并再次打开它,您将使用先前安装的版本。

但是如果您想为所有终端和应用程序激活一个版本的JDK,您可以使用命令**sdk default java <your_version>😗*

$ sdk default java 11.0.18-albba
Default java version set to 11.0.18-albba

$ java -version
openjdk version "11.0.18.14" 2023-01-17
OpenJDK Runtime Environment (Alibaba Dragonwell Standard Edition)-11.0.18.14+9-GA (build 11.0.18.14+9)
OpenJDK 64-Bit Server VM (Alibaba Dragonwell Standard Edition)-11.0.18.14+9-GA (build 11.0.18.14+9, mixed mode)

或者,您可以卸载该版本并重新安装它,如下所示,这将把该版本设置为当前JDK。

卸载一个JDK版本

如果你想卸载任何JDK版本,例如11.0.18-albba,你可以这样做:

$ sdk uninstall 11.0.18-albba

而且,如果您想再次安装卸载后的版本,您可以重新安装它,而且这一次,SDKMan不会下载它,因为它已经在您的机器上安装了它(如果您不手动删除它)。

$ sdk install 11.0.18-albba

Found a previously downloaded java 11.0.18-albba archive. Not downloading it again...

Installing: java 11.0.18-albba
Done installing!

Do you want java 11.0.18-albba to be set as default? (Y/n): y

Setting java 111.0.18-albba as default.

删除SDKMan

先删除

rm -r -f ${SDKMAN_DIR}

最后一步删除 ~/.zshrc , ~/.bash_profile , /etc/profile 文件中的初始化代码段

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱游泳的老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值