当前位置: 首页 > news >正文

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

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

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

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

使用SDKMan的一些要点如下:

  1. SDKMan是使用bash编写的。它要求curl和zip/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

激活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): YSetting 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的位置。在我的机器上,它安装在文件夹 jdk1.8.0_172.jdk,它位于文件夹/usr/Java/下。让我们通过**<java-folder>**来引用这个文件夹。

我们要做的第二件事是在已安装的**<java-folder>**和SDKMan之间建立一个符号链接。我们可以通过运行以下命令来实现:

# Oracle JDK
ln -s  /usr/local/<java-folder>  $SDKMAN_DIR/candidates/java/<java-folder>
ln -s /usr/local/<java-folder>/bin  $SDKMAN_DIR/candidates/java/<java-folder>/bin# Open JDK
ln -s  /usr/lib/jvm/<java-folder>  $SDKMAN_DIR/candidates/java/<java-folder>
ln -s /usr/lib/jvm/<java-folder>/bin  $SDKMAN_DIR/candidates/java/<java-folder>/bin

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

================================================================================
Available Java Versions
================================================================================+ jdk1.8.0_172.jd     8.0.201-zulu                                           13.ea.02-open       8.0.201-oracle                                         12.ea.26-open       8.0.192-zulufx                                         11.0.2-zulu         7.0.181-zulu                                           > * 11.0.2-open         1.0.0-rc-12-grl                                        11.0.2.j9-adpt      1.0.0-rc-11-grl                                        11.0.2.hs-adpt      1.0.0-rc-10-grl                                        11.0.1-zulufx       1.0.0-rc-9-grl                                         10.0.2-zulu         1.0.0-rc-8-grl                                         10.0.2-open                                                                9.0.7-zulu                                                                 * 9.0.4-open                                                                 8.0.202-amzn                                                               8.0.202.j9-adpt                                                            8.0.202.hs-adpt                                                            ================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

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

使用Java 9

$ sdk use java 9.0.4-open
Using java version 9.0.4-open in this shell.$ 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)

使用Java 11

$ sdk use java 11.0.2-open
Using java version 11.0.2-open in this shell.$ 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)

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

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

$ sdk default java 11.0.2-open
Default java version set to 11.0.2-open$ 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)

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

卸载一个JDK版本

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

$ sdk uninstall java 11.0.2-open

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

$ sdk install java 11.0.2-openFound a previously downloaded java 11.0.2-open archive. Not downloading it again...Installing: java 11.0.2-open
Done installing!Do you want java 11.0.2-open to be set as default? (Y/n): ySetting java 11.0.2-open as default.

删除SDKMan

先删除

rm -r -f ~/.sdkman/

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

http://www.lryc.cn/news/31752.html

相关文章:

  • JSONObject、fastJson(JsonObject)、Gson(JsonObject)区别
  • 如何在CSDN中使用ChatGPT
  • 【Spring6】| GoF之工厂模式
  • 初识Node.js
  • C51---软件消抖
  • redis数据持久化
  • Java StringBuffer类
  • 电路模型和电路定律(2)——“电路分析”
  • 天琊超级进程监视器的应用试验(19)
  • 使用 Pulumi 打造自己的多云管理平台
  • 什么是MyBatis?无论是基础教学还是技术精进,你都应该看这篇MyBatis
  • 【编程基础之Python】10、Python中的运算符
  • Android的基础介绍
  • 用户登录请求100w/每天, JVM如何调优
  • C/C++每日一练(20230306)
  • 多线程的创建、Thread类、线程安全、同步、通信
  • GraphPad Prism v9.5.1.733 科研绘图软件多语言
  • 基于intel soc+fpga智能驾驶舱和高级驾驶辅助系统软件设计(三)
  • 什么?年终奖多发1块钱竟要多缴9.6W的税
  • 动态绑定右键菜单控件
  • JavaScript基础三、数据类型
  • Python 随机漫步
  • Spark SQL优化机制
  • 十五、Spring中的八大模式
  • GrabCut算法、物体显著性检测
  • 亚马逊、速卖通、lazada店铺一直不出单,没流量怎么办?
  • 深度剖析C语言符号篇
  • 【学习总结】ORBSLAM3使用自己相机数据
  • C++单例模式实现
  • 343. 整数拆分