Linux使用Jenv优雅配置多版本JDK,开发环境切换不再繁琐

本文最后更新于 2023年9月17日 上午

JDK

JDK,全称:Java Development Kit,也就是Java开发人员发布的免费软件开发工具包。JDK一般包括JRE(Java Runtime Environment),所以我们需要使用Java环境,习惯性叫配置JDK环境

一般,我们需要用到基于Java虚拟机的操作服务时,需要有JDK的环境,这样的Java有两个特点(Write once, run anywhere):

  • 易于移植:只需要有Java的虚拟机(JDK)环境,即可运行Java程序。
  • 需要平台有Java虚拟机支持:Java程序有所限制,需要有Java环境支持

大部分程序开发者,或者普通用户,都有了解过JDK的配置。但是:

  • Linux服务器上怎么配置JDK呢?
  • 能否实现多版本JDK同时配置安装呢?

本次教程,就在Linux(以腾讯云轻量应用服务器演示)上安装多版本JDK,并使用Jenv管理JDK。

安装思路

传统安装(或者说常规安装),是到环境变量文件里,追加JAVA_HOME文件,然后重载配置后,JDK就可以使用了:

JDK安装

本文的方法,也差不多,但是在常规安装的方法后,追加Jenv的配置,实现JDK的切换:

Jenv管理JDK

教程同步

本教程同步发布至:

JDK选择

在配置JDK前,我们先来看看如何选择JDK。JDK的版本分支很多,大体上分为:

  • OpenJDK:开源的JDK
  • OracleJDK:Oracle公司开发的JDK

这个其实是看个人喜好,但是如果问我,我更推荐OpenJDK,避免项目因为版权问题而引发纠纷(每个程序员,都有个项目做大做强的梦……)

其中,软件包管理器的JDK,也属于OpenJDK的一种。

OpenJDK

最开始,JDK由SUN公司开发,但是后来被Oracle公司收购,现在的OracleJDK,其License 协议已经从BCL换成了OTN,这就意味着,你不能在生产环境使用这个版本了(可能要被反薅了🥲)。

不过呢?早在2006 年的 Java One 大会上,Sun公司(那时候还没被Oracle收购)就宣布Java技术的开源,随之诞生了OpenJDK,并在随着Google的Android全面使用OpenJDK开始,OpenJDK使用的人数越来越多。

目前,OpenJDK基本满足所有开发的需求和需要,小部分需要使用OracleJDK的包时,基本也可以通过引用外部包和自己编写依赖包解决(如:sun包下的Base64)。所以,目前使用OpenJDK,不管作为开发还是生产环境,都是不错的选择。

JDK版本选择

JDK的版本怎么选择呢?一般而言,JDK的版本并不是越高版本越好。JDK一般是一个稳定长期支持版本,然后经过两个快速开发版本迭代,再出一个稳定长期版本。比如:JDK8发布,JDK9、JDK10就是开发版本,之后的JDK11又是一个稳定长期支持版本。

所以,通常情况下,我们使用稳定长期支持版本比较好,如:JDK8、JDK11.

ZuluJDK

确定使用OpenJDK和JDK的版本,然后下载呢?这边我推荐ZuluJDK(一个OpenJDK的发行版本)

ZuluJDK

使用ZuluJDK的优点:

  • 支持ARM/X86架构设备
  • 支持Windows/Linux/macOS平台
  • 支持JDK6-JDK Latest版本
  • 支持配置JavaFx(Java的图形包)

当然,如果你需要Oracle JDK,也可以去Oracle官网下载:https://www.oracle.com/java/technologies/javase-downloads.html

辅助视频

嘿嘿,做教程视频不易(B站根本不会推荐引流),请务必一键三连嗷~B站视频地址:https://www.bilibili.com/video/BV1Yw411d7bU

配置JDK

第一次使用Linux的用户(尤其是Linux服务器用户)或者是macOS用户,往往是直接用软件项目管理器安装:

1
2
3
4
# Ubuntu/Debian
sudo apt-get install default-jdk
# Centos
yum install default-jdk

但是这样安装的OpenJDK,版本不好切换,且一般为JDK最新版本(现在是JDK16,你就无法安装JDK8或者11了嗷)。所以,建议自己手动配置JAVA_HOME。

当然,如果你要卸载软件包管理器的JDK,可以:

1
2
3
4
# Ubuntu/Debian
sudo apt-get purge "java*"
# CentOS
rpm -e --nodeps `rpm -qa | grep java`

JAVA_HOME

和Windows上的配置一样,我们需要配置JAVA_HOME,进而配置JDK环境。很简单。

1. 下载JDK

首先,选择我们要配置的JDK(这里的JDK是作为系统默认JDK),比如,这里为配置默认JDK为JDK16,因为我的Linux是腾讯云轻量应用服务器的Debian,所以选择x86版本的JDK

x86版本JDK16

我们直接复制下载地址,使用终端连接服务器,之后进行快速设置:

1
2
3
4
5
6
7
8
# 进入用户目录
cd ~
# 新建一个文件夹,用于存放JDK(方便管理)
mkdir myEnvironment
# 进入这个文件夹
cd myEnvironment
# 下载JDK 16
wget "https://cdn.azul.com/zulu/bin/zulu16.30.15-ca-fx-jdk16.0.1-linux_x64.tar.gz"

下载JDK

2. 释放文件

下载好后,是一个压缩包文件,我们需要解压:

下载好后文件

1
2
# 解压文件
tar -xf zulu16.30.15-ca-fx-jdk16.0.1-linux_x64.tar.gz

为了更方便配置文件,且更让用户能看懂这个是什么文件:),我们重命名:

1
2
3
4
# 重命名一长串名称的文件夹名为 ZuluJDK16
mv zulu16.30.15-ca-fx-jdk16.0.1-linux_x64 ZuluJDK16
# 删除最开始的压缩包,解决Linux服务器空间
rm -rf zulu16.30.15-ca-fx-jdk16.0.1-linux_x64.tar.gz

最后结果

现在,前期准备都完成了。准备开始最后一步

3. 环境变量

首先,明确我们JDK的位置:

JDK位置

比如:我的是:/root/myEnvironment/ZuluJDK16

现在,我们进行最后一步,也就是配置JDK到环境变量内。根据你的Shell版本,进行选择:

1
2
3
4
# Bash Shell用户
vim ~/.bashrc
# ZSH Shell用户
vim ~/.zshrc

P.S:一般Linux默认使用Bash作为默认Shell

追加内容:

1
2
3
4
5
# JAVA_HOME记得改成自己的嗷
JAVA_HOME=/root/myEnvironment/ZuluJDK16
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin/
export PATH JAVA_HOME CLASSSPATH

添加内容

之后,按ESC,在输入:wq回车保存。最后,终端内输入:

1
2
3
4
# Bash用户
source ~/.bashrc
# ZSH用户
source ~/.zshrc

重载配置

之后,就可以使用我们的(默认)JDK了:

1
java -version

JDK

当然,这样只是安装了一个版本JDK,如何安装和配置更多版本的JDK呢?

多版本JDK管理

安装了一个版本的JDK,但是,有时候却因为JDK版本不兼容,导致Springboot打包项目无法启动:

JDK版本不兼容

如何安装多版本的JDK呢?

方法很多,我推荐用jenv管理JDK。

1. Jenv

Jenv项目地址:https://www.jenv.be
按照官网的解释:
jEnv is a command line tool to help you forget how to set the JAVA_HOME environment variable
简单地说:使用一条命令可以轻松配置JAVA_HOME到环境变量。

2. 如何配置

Jenv的配置十分简单,简单地说:下载Jenv-配置到环境变量-重载环境变量

①下载jenv

方法很多,你可以直接下载Jenv的源码,或者直接用Git去同步源码,比如:

1
2
# 使用Git下载jenv源码到用户目录下的.jenv文件夹
git clone https://github.com/jenv/jenv.git ~/.jenv

jenv下载到本地

如果你的服务器无法连接Git,可以试试Gitee的同步源,或者到jenv的项目地址,手动下载Jenv并上传到服务器。

配置到环境变量

之后,我们到环境变量内配置jenv即可:

1
2
3
4
# Bash Shell用户
vim ~/.bashrc
# ZSH Shell用户
vim ~/.zshrc

并添加:

1
2
3
# Jenv
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

追加内容

记得按保存嗷。

重载环境变量

最后,我们重载环境变量

1
2
3
4
# Bash Shell用户
source ~/.bashrc
# ZSH Shell用户
source ~/.zshrc

jenv载入成功

现在jenv就可以使用了:

1
jenv help

jenv-帮助

接下来,我们重点看看jenv的使用。

Jenv具体使用

Jenv的使用很简单,这边我们讲讲如何Jenv添加新的JDK版本,并切换和管理JDK。

1. 新增JDK

利用上文配置JDK16的方法,我下载了JDK11:

JDK11

下载到服务器

对应的服务器存储地址是:/root/myEnvironment/ZuluJDK11

而我们添加这个JDK也很简单:

1
jenv add /root/myEnvironment/ZuluJDK11

添加JDK版本

当然,利用同样的方法,加入JDK16:

添加JDK版本

这样,我们就把需要的JDK版本都已经安装好了。只需要切换JDK版本即可。

2. 切换JDK

切换的方法很简单,首先看看当前安装的JDK版本:

1
jenv versions

查看已经添加的JDK版本

如果没有你想要的JDK版本,按上一步的方法安装即可。

这个时候,我们用的还是默认JDK(system (set by /root/.jenv/version)),我们要切换到JDK11只需要:

1
jenv local 11

这个时候,这个目录下使用的JDK就是JDK11了:

jenv

P.S:如果你需要全局JDK,可以用:

1
jenv global 11

3. 管理JDK

有时候,jenv的add扫描,扫描的内容过多怎么办呢?比如,我只添加了JDK11和JDK16,缺有这么多版本JDK:

多余版本

这个时候也很简单,使用remove命令即可:

使用remove命令

END

Linux上配置JDK和多版本JDK切换,就是这么地简单。说实话,本篇文章技术含量偏低,主要就是讲解Jevn的使用。另外,大家也可以看到我腾讯云轻量应用服务器使用的是Oh-my-zsh配置文件的ZSH Shell,它可以补充jenv的代码,有机会,下次讲解如何在腾讯云轻量应用服务器上配置ZSH嗷~

ZSH自动填充jenv

作者:Mintimate
Mintimate’s Blog:https://www.mintimate.cn



Linux使用Jenv优雅配置多版本JDK,开发环境切换不再繁琐
https://www.mintimate.cn/2021/07/12/JDKManager/
作者
Mintimate
发布于
2021年7月12日
许可协议