泉缘泉 发表于 2024-6-19 13:27:07

Ubuntu 22.04下Java情况的搭建(含多版本一键快速切换)

0-1开始Java语言编程之路
一、Ubuntu下Java语言情况搭建
二、Ubuntu下Docker情况安装
三、使用Docker搭建本地Nexus Maven私有仓库
四、Ubuntu下使用VisualStudioCode进行Java开发


为什么需要多个版本的JAVA

在真正要安装多个版本的JDK之前,我们先想一个问题,为什么我们需要多个版本的JDK?
通常来讲,如果是生产情况的服务器,只会安装一个版本的Java运行时情况,由于我们在现实构建和部署我们的服务端应用时,只会基于某一个版本的JDK来构建和部署。例如,我们基于JDK8构建的应用,在部署的时候,对应的服务器上只需要Java 8 的运行时情况,由于我们也不会在一台服务器上部署两个差别的应用,而且还依耐差别的Java运行时情况。至于为什么是这样的,大家可以去明白一下面向对象的经典原则:单一职责原则,放以这里也同样适用。
我们这里所说的需要多个版本的Java,一般指的是我们在本地开发的时候,用于开发的电脑,通常是我们的台式机或者笔记本电脑需要安装差别版本的JDK。
我想大家进入一家公司,特殊是一家成立多少年的公司,从公司创建起,到如今为此,从第一个Java服务,到如今最新开发的Java服务,大概率是基于差别的JDK版本开发的。那些在公司创建之初的系统,我们如今称之为legacy system。那么我们如果进入这样一家公司工作,大概率也会遇到要对这些legacy system 的代码进行维护的工作,这样新旧系统的开发和维护工作则很大概率需要我们在差别版本的JDK之间进行切换了。
Ubuntu下JDK安装的几种方式

方式一、通过APT 安装JDK

通过apt来安装JDK,如今只能用于安装Open-JDK,无法安装Oracle JDK,具体的安装方式如下:
sudo apt install openjdk-8-jdk
这条命令表示安装Open-JDK-8,其中openjdk-8-jdk 是需要安装的版本的名称,如果想要安装其它的版本,可以输入
sudo apt install openjdk-
后,按**【tab】** 键,会展示更多的版本号,如今支持 8, 11, 17, 19, 21等版本。
https://img-blog.csdnimg.cn/direct/35a2bb9ec69e46fd9872b60943653b94.png
通过apt install 的方式来安装Open-JDK,安装步伐会将JDK安装至 /usr/lib/jvm/目录下边,大家可以自行检察。
方式二、参考Oracle 官方安装指引

首先下载对应版本的JDK安装文件,大家可以在下面的下载地址找寻本身想要安装的版本
Oracle JDK 下载
可以选择差别的版本,tar.gz 或者 .deb格式都可以。
下载tar.gz文件,手工安装

默认情况下,Ubuntu系统自带的jdk是安装在/usr/lib/jvm/目录底下,所以按照惯例,我们先将.tar.gz 文件移动到 /usr/lib/jvm/目录下边,再进行安装,参考如下命令:
sudo mv ~/下载/jdk-17_linux-x64_bin.tar.gz /usr/lib/jvm
cd /usr/lib/jvm
sudo tar zxvf jdk-22_linux-x64_bin.tar.gz
下载.deb 文件,通过dpkg安装

同理,如果下载的是.deb文件(由于Ubuntu是源于Debian的),则执行如下命令:
sudo dpkg -i jdk-22_linux-x64_bin.deb
同样的,该命令会将JDK安装至/usr/lib/jvm/jdk-22目录底下
方式三、~~(该方式已失效仅供参考)~~通过第三方PPA源方式安装OracleJDK

首先我们需要指定一个apt 源,但该源如今已经停止了
sudo add-apt-repository ppa:webupd8team/java
sudo apt update
大家可以自行尝试一下,看是不是同样的结果,大致意思就是2019年4月16号以后,要下载Oracle JDK,都必须登录Oracle账号,且OracleJDK最新的license协议表明Oracke JDK只能免费用于个人或开发使用。所以PPA源已经停止,不再提供服务了。
   源: ‘deb https://ppa.launchpadcontent.net/webupd8team/java/ubuntu/ jammy main’
描述:
The Oracle JDK License has changed for releases starting April 16, 2019.
The new Oracle Technology Network License Agreement for Oracle Java SE is substantially different from prior Oracle JDK licenses. The new license permits certain uses, such as personal use and development use, at no cost – but other uses authorized under prior Oracle JDK licenses may no longer be available. Please review the terms carefully before downloading and using this product. An FAQ is available here: https://www.oracle.com/technetwork/java/javase/overview/oracle-jdk-faqs.html
Oracle Java downloads now require logging in to an Oracle account to download Java updates, like the latest Oracle Java 8u211 / Java SE 8u212. Because of this I cannot update the PPA with the latest Java (and the old links were broken by Oracle).
For this reason, THIS PPA IS DISCONTINUED.
UPDATE:
For Oracle Java 17, see a different PPA -> https://www.linuxuprising.com/2021/09/how-to-install-oracle-java-17-lts-on.html
Old description:
Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK8). There are no actual Java files in this PPA.
Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.html
Update: Oracle Java 9 has reached end of life: http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html
The PPA supports Ubuntu 18.10, 18.04, 16.04, 14.04 and 12.04.
More info (and Ubuntu installation instructions):- http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html
Debian installation instructions:
-Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html更多信息:https://launchpad.net/~webupd8team/+archive/ubuntu/java
正在添加源。
按 继续,或按 Ctrl-c 取消。
JAVA 情况的配置

上面已经提到了Ubuntu下JDK的几种差别安装方式,大家选择其一就好了。
在安装完JDK后,还需要进行JAVA情况的配置,不管是Linux也好,还是Windows也好,或者Mac OS也好,其实都会通过系统情况变量的方式来进行配置
有三个基本的情况变量需要我们进行配置


[*]JAVA_HOME
[*]JRE_HOME
[*]CLASSPATH
别的,我们也需要将$JAVA_HOME/bin目录参加至PATH情况变量中。
通常来讲,在Ubuntu下比较推荐的一种方式是修改/etc/environment文件,在该文件中参加如下内容:
JAVA_HOME="/usr/lib/jvm/jdk-17-oracle-x64"
JRE_HOME=${JAVA_HOME}/jre
CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib


修改完 environment 文件后,需要使该配置生效
source /etc/environment
那么到如今为止,一个JDK版本的安装和配置就竣事了。
那如果需要安装多个应该怎么办,现实上安装过程是一样的,只是在安装完后,我们需要手工修改一下情况变量的配置,以及使用update-alternatives命令来切换java的版本。
sudo update-alternatives --config java
sudo update-alternatives --config javac
这里只是枚举了 java 和 javac 这两个java 命令,其它的工具包也可以通过此方式来进行版本的切换。
怎样实现版本间的快速切换

那么问题来了,如果每一次切换,都需要手工修改情况变量,需要通过 update-alternatives --config来切换版本,想想也是很繁琐和麻烦的。
有没有更好的方式?
Y E S,固然是有的
这里我们需要结合一个java版本管理工具,jenv,以及简单的 shell 脚本来实现快速的切换。


[*]jenv 负责Java版本的切换
[*]自界说shell 脚本负责情况变量的修改
由于有一些工具或者应用,会依赖JAVA_HOME情况变量来确定当前的JDK版本,比如:Visual Studio Code。
只所以需要自界说shell脚本,是由于jenv不负责情况变量的修改。
jenv 的安装和使用

第一步:下载jenv
git clone https://github.com/jenv/jenv.git ~/.jenv
第二步:将jenv参加PATH,并初始化。编辑~/.bashrc

#大家注意,这里只是临时这样操作,只是用于检测jenv是否安装好
#最后 .bashrc 文件还需要进行调整
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(jenv init -)"' >> ~/.bashrc
source ~/.bashrc
第三步:将已经安装好的各个版本的JDK本添加到jenv版本管理工具中。
jenv add /usr/lib/jvm/jdk-17-oracle-x64
jenv add /usr/lib/jvk/other-jdk-version
第四步:检察或切换版本
#查看已添加的JDK版本
jenv versions

#设置全局JDK版本
jenv global <jdk_version>

#仅设置当前目录的JDK版本
jenv local <jdk_version>
快速调解情况变量

第一步:创建一个目录用于保存配置文件和shell脚本
mkdir ~/jdk_env
第二步:准备各个JDK版本的情况变量配置文件,命名格式为:env_ora_jdk_version
JAVA_HOME="/usr/lib/jvm/jdk-17-oracle-x64"
JRE_HOME=${JAVA_HOME}/jre
CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib


第三步:创建切换版本的shell脚本,简单起见,每一个JDK版本搭配一个shell脚本,命名为:env_4_jdk_17.sh
#!/bin/bash

echo Change JAVA_HOME Environment to Oracle JDK 17
sudo cp ~/jdk_env/env_ora_jdk_17 /etc/environment

#设置一个修改标识,.bashrc中会读取该修改标识
export ENV_CHANGE=1
source ~/.bashrc

#请注意版本号,可通过jenv versions查看
jenv global oracle64-17.0.9
java -version
echo JAVA_HOME : $JAVA_HOME
echo Change Environment Done!
第四步:编辑 ~/.bashrc 文件,在增加 alias
#第一部分:增加alias,快捷命令alias jdk8='source ~/jdk_env/env_4_jdk_8.sh'alias jdk17='source ~/jdk_env/env_4_jdk_17.sh'alias jdk21='source ~/jdk_env/env_4_jdk_21.sh'#第二部分:在.bashrc文件末尾增加以下内容#这里是先配置默认PATHexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin#查抄JRE_HOME的值是否已经设置好,如果未设置好,则读取一下配置if [ "$JRE_HOME" = '${JAVA_HOME}/jre' -o "$ENV_CHANGE" = '1' ]; then    source /etc/environment
    export ENV_CHANGE=0fi#增加jenv 以及 java home到 PATHexport PATH="$HOME/.jenv/bin:$JAVA_HOME/bin:$PATH"eval "$(jenv init -)"#执行完 上有条   eval "$(jenv init -)" 后,JAVA_HOME 会失效,需要重要加载一下JAVA情况变量if [ -z "$JAVA_HOME" ]; then    source /etc/environment
fi 测试JDK 切换
source ~/.bashrc

jdk21
那么,本文到这里就已经竣事,如果你的开发情况需要在差别JDK版本之间进行切换,希望本文能帮助到你,为你提升那么一丢丢的服从,实现一键切换JDK版本。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Ubuntu 22.04下Java情况的搭建(含多版本一键快速切换)