如何在 Linux 上使用 jEnv 管理多个 Java 版本

作为 Java 开发人员,您希望使用不同的 Java 版本测试您的代码。 或者您只是想跟上新 Java 版本的功能。 设置不同的 Java 环境通常是一项耗时且艰巨的任务。 这就是版本管理系统派上用场的地方! 今天,我们将讨论一个这样的版本管理器,叫做 环境. jEnv 是一个命令行工具,用于在 Linux 上管理多个 java 版本。 它就像是 开发人员,但仅适用于 Java。 jEnv 是一个更新的分支 杰夫,它本身改编自 环境. jEnv 对于开发需要确切 Java 版本的 Java 应用程序非常有用。

使用 jEnv,一个开发者;

  • 可以并排安装和管理多个 Java 安装,
  • 可以在全局、目录(特定于应用程序)甚至每个 shell 级别(特定于 shell)上设置 Java 安装,
  • 可以轻松快速地在不同的java版本之间切换,
  • 不需要为每个版本设置 JAVA_HOME 环境变量。

内容

  1. 安装 Java
  2. 在 Linux 上安装 jEnv
    1. 验证 jEnv 安装
  3. 在 Linux 上使用 jEnv 管理多个 Java 版本
    1. 添加不同的 Java 环境
    2. 设置全局 Java 环境
    3. 设置本地或每个目录的 Java 环境
    4. 设置特定于 shell 的 Java 环境
      1. 无需设置 $JAVA_HOME!
    5. 帮助我们帮助您:

安装 Java

请注意 jEnv 不会安装 Java 为你。 它只会管理现有的 java 安装。 您应该使用您的包管理器或您选择的任何其他方式安装 Java。 我将在我的 Ubuntu 系统上安装 openjdk 13 和 14:

$ sudo apt install openjdk-13-jdk $ sudo apt install openjdk-14-jdk

如果您已经安装了Java,请忽略此步骤。

在 Linux 上安装 jEnv

使用命令 Git 克隆 jEnv 存储库:

$ git clone https://github.com/jenv/jenv.git ~/.jenv

上面的命令将 jEnv 的内容克隆到名为的本地目录中 .jenv.

然后,将 jEnv 添加到您的 $PATH:

$ echo ' PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

接下来,初始化 jEnv:

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

最后,使用命令更新我们刚刚在 ~/.bash_profile 中所做的更改。

$ source ~/.bash_profile

如果它因任何原因不起作用,只需使用 ~/.bashrc 而不是 ~/.bash_profile。

$ echo ' PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(jenv init -)"' >> ~/.bashrc $ source ~/.bashrc

如果你在 零星 shell,安装jEnv的命令是:

$ echo ' PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc $ echo 'eval "$(jenv init -)"' >> ~/.zshrc 

验证 jEnv 安装

让我们验证是否使用命令安装了 jEnv:

$ jenv doctor

示例输出:

[OK]	No JAVA_HOME set [ERROR]	Java binary in path is not in the jenv shims. [ERROR]	Please check your path, or try using /path/to/java/home is not a valid path to java installation. 	PATH : /home/ostechnix/.jenv/libexec:/home/ostechnix/.jenv/shims:/home/ostechnix/.jenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin [OK]	Jenv is correctly loaded

正如您所看到的,输出表明 JAVA_HOME 变量尚未设置并且 jenv 已正确加载。 不要介意其他错误。 在我们在下一节中添加 Java 后,它们将消失。

现在让我们使用命令设置 JAVA_HOME 环境变量:

$ jenv enable-plugin 

您应该重新启动当前的 shell 会话以激活 jenv 导出插件 echo 导出插件已激活。 要重新启动 shell 会话,请运行:

$ exec $SHELL -l

现在,再次运行“jenv doctor”命令,看看它返回什么!

$ jenv doctor

示例输出:

[OK]	JAVA_HOME variable probably set by jenv PROMPT [ERROR]	Java binary in path is not in the jenv shims. [ERROR]	Please check your path, or try using /path/to/java/home is not a valid path to java installation. 	PATH : /home/ostechnix/.jenv/libexec:/home/ostechnix/.jenv/shims:/home/ostechnix/.jenv/bin:/home/ostechnix/.jenv/shims:/home/ostechnix/.jenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin [OK]	Jenv is correctly loaded

完毕! JAVA_HOME 变量将由 jEnv 根据当前活动的 Java 环境自动设置。

在 Linux 上使用 jEnv 管理多个 Java 版本

不带任何选项运行 jEnv 将显示帮助部分:

$ jenv

示例输出:

jenv 0.5.3-2-g78dbd7f Usage: jenv <command> [<args>]  Some useful jenv commands are:    commands    List all available jenv commands    local       Set or show the local application-specific Java version    global      Set or show the global Java version    shell       Set or show the shell-specific Java version    rehash      Rehash jenv shims (run this after installing executables)    version     Show the current Java version and its origin    versions    List all Java versions available to jenv    which       Display the full path to an executable    whence      List all Java versions that contain the given executable    add         Add JDK into jenv. A alias name will be generated by parsing "java -version"  See `jenv help <command>' for information on a specific command. For full documentation, see: https://github.com/jenv/jenv/blob/master/README.md

添加不同的 Java 环境

现在我们需要告诉 jenv 我们的 Java 环境在哪里。

首先,让我们使用命令添加 openjdk-13 环境:

$ jenv add /usr/lib/jvm/java-13-openjdk-amd64/

示例输出:

openjdk64-13.0.3 added 13.0.3 added 13.0 added 13 added

然后,使用命令添加 openjdk-14:

$ jenv add /usr/lib/jvm/java-14-openjdk-amd64/ openjdk64-14.0.1 added 14.0.1 added 14.0 added 14 added

现在使用命令检查 jenv 的所有可用 Java 版本:

$ jenv versions

示例输出:

* system (set by /home/ostechnix/.jenv/version)   13   13.0   13.0.3   14   14.0   14.0.1   openjdk64-13.0.3   openjdk64-14.0.1

正如您在上面的输出中看到的,当前正在管理两个 Java 环境,即 openjdk 13 和 openjdk 14。 别介意输出中的其他数字。 它们只是指代相同版本的别名。

设置全局 Java 环境

就像我已经说过的那样,jenv 可以让您在全局或每个目录/项目或每个 shell 上设置 java 安装,并在它们之间切换,而无需更改全局版本。

让我们检查当前的 Java 版本:

$ java --version openjdk 14.0.1 2020-04-14 OpenJDK Runtime Environment (build 14.0.1+7-Ubuntu-1ubuntu1) OpenJDK 64-Bit Server VM (build 14.0.1+7-Ubuntu-1ubuntu1, mixed mode, sharing)

正如您在输出中看到的,当前的全局版本已设置为 openjdk-14。

要将 openjdk-13 设置为全局版本,请运行:

$ jenv global openjdk64-13.0.3

现在检查Java版本:

$ java --version openjdk 13.0.3 2020-04-14 OpenJDK Runtime Environment (build 13.0.3+3-Ubuntu-1ubuntu2) OpenJDK 64-Bit Server VM (build 13.0.3+3-Ubuntu-1ubuntu2, mixed mode)