使用jEnv管理多个JDK安装 - reflectoring


jEnv是一个方便的工具,可以在不同项目之间管理多个JDK版本。
作为开发人员,我们经常同时在不同的代码库上工作。尤其是在具有微服务的环境中,我们可能一天要多次切换代码库。
在每两年发布一次新Java版本的日子里,这通常不是问题,因为大多数代码库都需要相同的Java版本。
当Java发行节奏每6个月更改一次时,这种情况就会改变。今天,如果我们正在使用多个代码库,则每个代码库都有可能使用不同的Java版本。
jEnv是一个工具,可以帮助我们管理多个JDK安装并配置每个代码库以使用特定的JDK版本,而无需更改JAVA_HOME环境变量。
 
安装jEnv
jEnv支持Linux和MacOS操作系统。如果您使用的是Windows,则需要安装LinuxWindows子系统(或bash模拟器,如GitBash)才能使用它。
按照jEnv主页上的安装说明安装jEnv。
 
安装JDK
如果您正在阅读本文,则很可能要为正在使用的代码库设置新的JDK。让我们从AdoptOpenJDK网站下载JDK 。
选择所需的版本并下载。将.tar.gz文件解压缩到任意位置。
关于jEnv的好处是,我们不需要通过brew,yum或apt之类的软件包管理器来安装JDK。我们只需要下载一个JDK并将其放入某个文件夹中即可。
您仍然可以使用brew,yum或apt来安装JDK,您只需要查找包管理器之后放置JDK的文件夹即可。
 
将JDK添加到jEnv
要将新的JDK与jEnv一起使用,我们需要告诉jEnv在哪里找到它。首先,使用jenv versions命令检查jEnv已经支持哪些JDK 。
就我而言,我已经安装了JDK 11、13和14。每个版本都有三种不同的名称。
假设我们已经下载了JDK 15并将其提取到该文件夹​​中~/software/java/jdk-15+36。
现在,我们将新的JDK添加到jEnv中:

jenv add /home/tom/software/java/jdk-15+36/

如果再次运行jenv versions,将发现:在JDK 15已名下加15和openjdk64-15。

 
本地与全局JDK
jEnv支持全局JDK和多个本地JDK的概念。
全局JDK是在java计算机上任何地方键入命令行时都将使用的JDK 。
本地JDK是仅为特定文件夹配置的JDK。如果我们java在此文件夹中输入命令行,它将不使用全局JDK,而是使用本地JDK。
我们可以使用它为不同的项目配置不同的JDK(只要它们位于不同的文件夹中)。

  • 设置全局JDK

首先,我们检查全局JDK的版本:
jenv global

在我的情况下,输出为:
system

这意味着系统安装的JDK将用作全局JDK。该名称system不是很有帮助,因为它没有说明它是哪个版本。让我们将全局JDK更改为具有版本号的更有意义的JDK:
jenv global 11

此命令已将全局使用的JDK版本更改为11。就我而言,该版本与以前相同,但是如果键入jenv global,我现在将看到哪个JDK版本是我的全局版本。
  • 设置本地JDK

还记得我们下载的JDK 15吗?下载它的原因可能是我们正在开发一个需要运行JDK 15的新项目。
假设该项目位于文件夹中~/shiny-project。让我们cd进入这个文件夹。
如果现在输入java -version,将得到以下结果:

openjdk version "11.0.8" 2020-07-14

这是因为JDK 11是我的全局JDK。
让我们将此项目更改为JDK 15:

jenv local 15

现在再次键入java -version,输出将是:
openjdk version "15" 2020-09-15

这是如何运作的?
使用该jenv local命令后,您将.java-version在当前文件夹中找到一个名为的文件。该文件包含本地JDK的版本号。
在安装过程中,jEnv会覆盖该java命令。每次我们java现在调用时,jEnv都会查找一个.java-version文件,如果找到一个文件,则将启动该文件中定义的JDK版本。如果找不到.java-version文件,则会启动全局配置的JDK。
 
使用Maven和Gradle
因此,如果我们java通过命令行调用,它将立即选择一个本地配置的JDK。大!
但是,诸如Maven或Gradle之类的工具仍然使用JDK的系统版本!
让我们来看看我们能做些什么。
  • 配置jEnv以与Maven一起使用

使Maven与jEnv定义的本地JDK一起使用很容易。我们只需要安装maven插件:
jenv enable-plugin maven

如果现在在~/shiny-project文件夹中运行mvn -version,将获得以下输出:
Maven home: .../apache-maven-3.6.3
Java version: 15, vendor: AdoptOpenJDK, runtime: /home/tom/software/java/jdk-15+36
Default locale: en_AU, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-52-generic", arch: "amd64", family: "unix"

  • 配置jEnv以使用Gradle

就我而言,Gradle自动选择了jEnv本地配置的JDK!
如果您无法立即使用它,则可以类似于上述Maven插件那样安装gradle插件:
jenv enable-plugin gradle

如果现在在~/shiny-project文件夹中运行gradle -version,将获得安装结果。