如何使用SDKMAN管理您的JDK

译文 精选
开发 开发工具
在本博客中,你将学习到如何使用 SDKMAN管理 Linux 系统上的几个Java 开发工具包(JDK)。 此外,除了JDK,一些软件开发工具包(SDK)也可以通过 SDKMAN 去管理。

译者 | 胥磊

审校 | 孙淑娟 梁策

1. 前言

不久前,我的一位同事向我展示了他是如何使用 SDKMAN,以及如何轻松在他的 Linux 系统上维护不同版本的 JDK、Maven等等。我以前听说过 SDKMAN,当时没有花时间去仔细研究,不过现在我已经掌握了它的使用方法。

在开始使用 SDKMAN 之前,我查看了我的 Linux上JDK的版本(使用的是Ubuntu 20.04.4 LTS 版本)。

首先,我查了下update-alternatives命令返回的Java版本的列表。发现我的系统里有两个Java 11版本。

Shell
$ update-alternatives --list java
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
/usr/lib/jvm/jdk-11.0.3+7/bin/java

我还通过 IntelliJ 安装过JDK,这些可以在你系统的home 目录下的.Jdks里找到。这就有了3个不同的Java版本。

Shell
$ ls .jdks/
openjdk-14.0.1 openjdk-16.0.2
openjdk-14.0.1-intellij-downloader-info.txt  openjdk-17

所以结论就是:我已经把系统搞的一团糟了。现在,让我们看看 SDKMAN 是否能够帮助我去清理系统环境,并删除所有冗余的JDK。

2. 安装

SDKMAN 的安装非常简单,只需要执行以下的命令:

Shell
$ curl -s "https://get.sdkman.io" | bash
...
All done!


Please open a new terminal, or run the following in the existing one:

source "/home/<your user>/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

sdk help

Enjoy!!!

通过source命令读取和执行所需要的初始化文件里的命令:

Shell
$ source "/home/<your user>/.sdkman/bin/sdkman-init.sh"

您可以通过请求 SDKMAN 的版本来验证安装是否成功。

Shell
$ sdk version
==== BROADCAST =================================================================
* 2022-03-03: jbang 0.90.2 available on SDKMAN! https://github.com/jbangdev/jbang/releases/tag/v0.90.2
* 2022-03-02: quarkus 2.7.3.Final available on SDKMAN! https://github.com/quarkusio/quarkus/releases/tag/2.7.3.Final
* 2022-02-28: micronaut 3.3.4 available on SDKMAN!
================================================================================

SDKMAN 5.13.2

如你所见,最新版本也展示出来了,这对于获得最新的可用版本通知同样非常有帮助。

以上就是SDKMAN安装的全部内容。

3. JDK列表

您可以通过查看网站或者执行list 命令来了解哪些工具包可以通过 SDKMAN 进行安装。您也可以重新通过less这个基本命令进行分页来翻阅和搜索列表。

Shell
$ sdk list

可以通过list命令后缀java参数来获取更详细的JDK可用版本列表,当然这些可用的 JDK也可以在网站上找到。此外也可以重新通过less命令进行分页输出。

Shell
$ sdk list java

4.安装JDK

首先,我将要核实系统中默认使用的是哪个版本的 Java。看来我使用的是 AdoptOpenJDK 11.0.3版本,这个比我预想的要老。

Shell
$ java --version
openjdk 11.0.3 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)

从 SDKMAN选择由Adoptium 提供的名为Eclipse Temurin 的AdoptOpenJDK,安装最新的 JDK 17 LTS 版本。

Shell
$ sdk install java 17.0.2-tem

Downloading: java 17.0.2-tem
In progress...
Repackaging Java 17.0.2-tem...
Done repackaging...
Installing: java 17.0.2-tem
Done installing!
Setting java 17.0.2-tem as default.

再次验证下默认的 Java 的版本号,它已经更改为你刚刚安装的版本。

Shell
$ java --version
openjdk 17.0.2 2022-01-18
OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode, sharing)

当然也可以通过同样的方式安装 JDK 11 LTS 版本。最后问题来了,你是否希望这个 JDK 成为默认版本?当然不是了,JDK 17才是最新 LTS 版本,理应作为默认版本。

Shell
$ sdk install java 11.0.14-tem
Downloading: java 11.0.14-tem
In progress...
Repackaging Java 11.0.14-tem...
Done repackaging...
Installing: java 11.0.14-tem
Done installing!
Do you want java 11.0.14-tem to be set as default? (Y/n): n

5.默认JDK

如果您改变初衷,仍然希望使用JDK 11作为默认版本,那么您可以使用default命令来实现这一点。

Shell
$ sdk default java 11.0.14-tem

Default java version set to 11.0.14-tem

对此验证一下:

Shell
$ java --version
openjdk 11.0.14 2022-01-18
OpenJDK Runtime Environment Temurin-11.0.14+9 (build 11.0.14+9)
OpenJDK 64-Bit Server VM Temurin-11.0.14+9 (build 11.0.14+9, mixed mode)

然后把它重新设置为 JDK 17。

Shell
$ sdk default java 17.0.2-tem

Default java version set to 17.0.2-tem

当然也可以仅通过在终端回话中使用 use 命令来更改默认的 JDK。

Shell
$ sdk use java 11.0.14-tem
Using java version 11.0.14-tem in this shell.

在这个命令窗口中,看到当前使用的JDK版本是JDK11。

Shell
$ java --version
openjdk 11.0.14 2022-01-18
OpenJDK Runtime Environment Temurin-11.0.14+9 (build 11.0.14+9)
OpenJDK 64-Bit Server VM Temurin-11.0.14+9 (build 11.0.14+9, mixed mode)

打开另一个终端窗口,发现JDK版本仍然是 JDK 17。需要注意的是, JAVA_HOME 环境变量也是指向正确的 Java 版本。

Shell
$ echo $JAVA_HOME
/home/<your user>/.sdkman/candidates/java/current

6.清除其他的JDK

当前的JDK已经是通过 SDKMAN 安装的,是时候清除系统中的其他JDK了。

Shell
$ dpkg --list | grep jdk
ii  openjdk-11-jre-headless:amd64              11.0.13+8-0ubuntu1~20.04

移除openjdk-11-jre-headless:amd64

Shell
$ sudo apt remove openjdk-11-jre-headless:amd64

再次通过 update-alternatives命令进行验证,我们注意到仍然存在一个可用的Java 11的版本。

Shell
$ update-alternatives --list java
/usr/lib/jvm/jdk-11.0.3+7/bin/java

通过update-alternatives命令进行移除。

Shell
$ sudo update-alternatives --remove "java" /usr/lib/jvm/jdk-11.0.3+7/bin/java
update-alternatives: removing manually selected alternative - switching java to auto mode

通过update-alternatives命令进行验证,它已经移除了。

Shell
$ update-alternatives --list java
update-alternatives: error: no alternatives for java

但是,它并没有从文件系统中删除,需要导航到/usr/lib/jvm 目录,然后删除 JDK的目录。

Shell
$ sudo rm -rf jdk-11.0.3+7/

剩下要做的就是移除 IntelliJ 安装的 JDK。它们位于home目录下的.jdks中。导航到你的Home目录并移除.jdks目录。

Shell
$ rm -rf .jdks/

7.设置IntelliJ的JDK

打开 IntelliJ 导航到File – Project Structure,这也是配置 JDK 的位置。有点奇怪的是,它位于Project Structure下面,而不是通常的Settings目录下。通过点击 + 符号,你可以添加 SDKMAN JDK。

你还需要为自己的工程选择JDK。

构建你的工程,在日志中,你会注意到正在使用 SDKMAN JDK。

8.结论

SDKMAN 是一个可以用来控制不同版本且使用简单的工具,很有必要成为你开发工具包的一部分。它降低了我系统的混乱程度,让我可以很容易地控制系统里的不同版本。此外,还可以使用upgrade命令来检查是否有新的版本。

译者介绍

胥磊,51CTO社区编辑,某头部电商技术副总监,关注Java后端开发,技术管理,架构优化,分布式开发等领域。

原文标题:How to Manage Your JDKs With SDKMAN,作者:Gunter Rotsaert


责任编辑:华轩 来源: 51CTO
相关推荐

2023-06-16 16:06:02

lazydockerDocker容器

2022-08-16 08:19:04

Sentinel微服务

2010-09-24 16:52:18

sql DATENAM

2010-10-13 15:59:21

MySQL索引

2011-10-18 10:27:46

ibmdwDominoAPI

2010-09-10 16:24:06

SQL函数

2018-11-08 09:20:15

SDKMANSDKBash

2010-10-21 16:59:37

SQL Server创

2010-10-21 16:59:37

SQL Server创

2010-10-12 10:10:55

mysql触发器

2015-11-24 12:53:32

LinuxUbuntuGFI

2009-10-23 16:43:34

APC

2010-09-07 15:54:47

SQL语句LIKE

2017-01-17 15:29:59

2010-10-13 15:01:03

MySQL更新日志文件

2010-10-11 15:28:14

MySQL group

2012-03-01 11:47:01

2021-06-21 09:00:00

Python代码开发

2022-01-13 09:54:58

微服务 Istio 通信

2010-09-24 15:58:24

SQL语句逐条更新
点赞
收藏

51CTO技术栈公众号