likes
comments
collection
share

[Java翻译]用jEnv管理多个JDK的安装

作者站长头像
站长
· 阅读数 3

本文由 简悦SimpRead 转码,原文地址 reflectoring.io

作为Java开发者,我们经常需要为不同的项目在不同的JDK版本之间切换......。

作为开发人员,我们经常同时在不同的代码库上工作。特别是在有微服务的环境中,我们可能每天都要多次切换代码库。

在每隔几年就发布一个新的Java版本的时代,这往往不是问题,因为大多数代码库需要相同的Java版本。

当Java的发布周期变为每6个月时,这种情况就改变了。今天,如果我们在多个代码库上工作,有可能每个代码库都在使用不同的Java版本。

jEnv是一个帮助我们管理多个JDK安装的工具,并将每个代码库配置为使用特定的JDK版本,而不必改变JAVA_HOME环境变量。

请务必查看关于SDKMAN的文章!,这是一个用于管理JDK(和其他工具)的替代工具。

安装jEnv

jEnv支持Linux和MacOS操作系统。如果你使用的是Windows,你需要安装Windows Subsystem for Linux(或像GitBash这样的bash模拟器)来使用它。

按照jEnv主页上的安装说明来安装jEnv。

安装JDK

如果你正在阅读这篇文章,你有可能想为你正在进行的代码库设置一个新的JDK。让我们从AdoptOpenJDK网站下载一个JDK。

选择你想要的版本并下载它。将.tar.gz文件解压到你想要的地方。

jEnv的好处是,我们不需要通过brew、yum或apt等包管理器来安装JDK。我们只需下载一个JDK,并把它放到某个文件夹中。

你仍然可以使用brew、yum或apt来安装你的JDK,你只需要在事后找出你的包管理器把JDK放在哪个文件夹里。

向jEnv添加JDK

为了在jEnv中使用新的JDK,我们需要告诉jEnv在哪里可以找到它。让我们先用jenv versions命令检查jEnv已经知道的JDK的哪些版本。

* system (set by /home/tom/.jenv/version)
  11
  11.0
  11.0.8
  13
  13.0
  13.0.2
  14
  14.0
  14.0.2
  openjdk64-11.0.8
  openjdk64-13.0.2
  openjdk64-14.0.2

在我的例子中,我已经安装了JDKs 11、13和14。每个版本都有三个不同的名字。

假设我们已经下载了JDK 15,并将其解压到~/software/java/jdk-15+36文件夹中。

现在,我们将新的JDK添加到jEnv中。

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

如果我们再次运行jenv versions,我们会得到以下输出。

  11
  11.0
  11.0.8
  13
  13.0
  13.0.2
  14
  14.0
  14.0.2
  15
  openjdk64-11.0.8
  openjdk64-13.0.2
  openjdk64-14.0.2
  openjdk64-15

JDK 15 已被添加到 15openjdk64-15 的名称下。

本地 JDK 与全局 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
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)

这是因为JDK 11是我的全局JDK。

让我们为这个项目把它改为JDK 15。

jenv local 15

现在,再次输入java -version,输出结果将是。

openjdk version "15" 2020-09-15
OpenJDK Runtime Environment AdoptOpenJDK (build 15+36)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15+36, mixed mode, sharing)

在这个文件夹中调用java现在将总是调用Java 15而不是Java 11。

这是怎么做到的?

使用jenv local命令后,你会在当前文件夹中发现一个名为.java-version的文件。该文件包含本地JDK的版本号。

在安装过程中,jEnv会覆盖java命令。每次我们现在调用java,jEnv都会寻找.java-version文件,如果找到了,就启动该文件中定义的JDK版本。如果它没有找到.java-version文件,就会启动全局配置的JDK。

与Maven和Gradle合作

因此,如果我们通过命令行调用java,它现在会接收一个本地配置的JDK。很好!但Maven或Gradle等工具

但像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"

Maven现在正在使用新的JDK 15。耶!

配置jEnv使其与Gradle一起工作

在我的例子中,Gradle自动接收了jEnv在本地配置的JDK!

如果你不能开箱工作,你可以按照上面Maven插件的方式安装gradle插件。

jenv enable-plugin gradle

如果我们现在在上面的~/shiny-project文件夹中运行gradle -version,我们会得到以下输出。

------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------

Build time:   2020-06-02 20:46:21 UTC
Revision:     a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4

Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          15 (AdoptOpenJDK 15+36)
OS:           Linux 5.4.0-52-generic amd64

结论

jEnv是一个方便的工具,用于管理不同项目之间的多个JDK版本。通过jenv local <version>,我们可以配置一个JDK版本,在当前文件夹中使用。


www.deepl.com 翻译