0-1开始Java语言编程之路
一、Ubuntu下Java语言环境搭建
二、Ubuntu下Docker环境安装
三、使用Docker搭建本地Nexus Maven私有仓库
四、Ubuntu下使用VisualStudioCode进行Java开发
Ubuntu下JAVA环境搭建指南
为什么需要多个版本的JAVAUbuntu下JDK安装的几种方式方式一、通过APT 安装JDK方式二、参考Oracle 官方安装指引下载tar.gz文件,手工安装下载.deb 文件,通过dpkg安装 方式三、~~(该方式已失效仅供参考)~~通过第三方PPA源方式安装OracleJDK JAVA 环境的配置如何实现版本间的快速切换jenv 的安装和使用快速调整环境变量
为什么需要多个版本的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等版本。
通过apt install 的方式来安装Open-JDK,安装程序会将JDK安装至 /usr/lib/jvm/[xxxx]目录下边,大家可以自行查看。
方式二、参考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/jvmcd /usr/lib/jvmsudo 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/javasudo 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
正在添加源。
按 [ENTER] 继续,或按 Ctrl-c 取消。
JAVA 环境的配置
上面已经提到了Ubuntu下JDK的几种不同安装方式,大家选择其一就好了。
在安装完JDK后,还需要进行JAVA环境的配置,不管是Linux也好,还是Windows也好,或者Mac OS也好,其实都会通过系统环境变量的方式来进行配置
有三个基本的环境变量需要我们进行配置
另外,我们也需要将$JAVA_HOME/bin目录加入至PATH环境变量中。
通常来讲,在Ubuntu下比较推荐的一种方式是修改/etc/environment文件,在该文件中加入如下内容:
JAVA_HOME="/usr/lib/jvm/jdk-17-oracle-x64"JRE_HOME=${JAVA_HOME}/jreCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
修改完 environment 文件后,需要使该配置生效
source /etc/environment
那么到目前为止,一个JDK版本的安装和配置就结束了。
那如果需要安装多个应该怎么办,实际上安装过程是一样的,只是在安装完后,我们需要手工修改一下环境变量的配置,以及使用update-alternatives命令来切换java的版本。
sudo update-alternatives --config javasudo 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"' >> ~/.bashrcecho 'eval "$(jenv init -)"' >> ~/.bashrcsource ~/.bashrc
第三步:将已经安装好的各个版本的JDK本添加到jenv版本管理工具中。
jenv add /usr/lib/jvm/jdk-17-oracle-x64jenv 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}/jreCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
第三步:创建切换版本的shell脚本,简单起见,每一个JDK版本搭配一个shell脚本,命名为:env_4_jdk_17.sh
#!/bin/bashecho Change JAVA_HOME Environment to Oracle JDK 17sudo cp ~/jdk_env/env_ora_jdk_17 /etc/environment#设置一个修改标识,.bashrc中会读取该修改标识export ENV_CHANGE=1source ~/.bashrc#请注意版本号,可通过jenv versions查看jenv global oracle64-17.0.9java -versionecho JAVA_HOME : $JAVA_HOMEecho 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/environmentfi
测试JDK 切换
source ~/.bashrcjdk21
那么,本文到这里就已经结束,如果你的开发环境需要在不同JDK版本之间进行切换,希望本文能帮助到你,为你提升那么一丢丢的效率,实现一键切换JDK版本。