阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何使用 SDKMAN管理 Linux 系统上的Java 开发工具包

30次阅读
没有评论

共计 4507 个字符,预计需要花费 12 分钟才能阅读完成。

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

不久前,我的一位同事向我展示了他是如何使用 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。

安装

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//.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!

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

Shell
$ source "/home//.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 安装的全部内容。

JDK 列表

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

Shell
$ sdk list

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

Shell
$ sdk list java
安装 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
默认 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//.sdkman/candidates/java/current
清除其他的 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/
设置 IntelliJ 的 JDK

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

如何使用 SDKMAN 管理 Linux 系统上的 Java 开发工具包

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

如何使用 SDKMAN 管理 Linux 系统上的 Java 开发工具包

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

结论

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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计4507字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中