如何使用Linux上的JENV管理多个Java版本
作为Java开发人员,我们希望使用不同的Java版本测试代码。
或者我们只是想跟上新的Java版本的功能。
设置不同的Java环境通常可能是耗时和令人生畏的任务。
这是版本管理系统方便的地方!今天,我们将讨论一个称为jenv的此类版本管理器。
Jenv是一个在Linux上管理多个Java版本的命令行工具。
它就像sdkman一样,但仅适用于java。
Jenv是Jenv的更新fork,本身就是从rbenv调整的。
Jenv对于开发需要精确的Java版本的Java应用程序非常有用。
使用Jenv,开发人员;
- 可以并排安装和管理多个Java安装,
- 可以在全局,目录(特定于应用程序)甚至每个shell级别(shell特定)上设置java安装,
- 可以轻松快速地在不同的Java版本之间切换,
- 不需要为每个版本设置java_home环境变量。
安装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 clone jenv存储库使用命令:
$git clone https://github.com/jenv/jenv.git ~/.jenv
上面的命令将克隆名为.jenv的本地目录中的jenv的内容。
然后,将Jenv添加到$Path:
$echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
接下来,初始化jenv:
$echo 'eval "$(jenv init -)"' >> ~/.bash_profile
最后,使用命令更新我们刚刚在~/.bash_profile中进行的更改。
$source ~/.bash_profile
如果它没有任何原因不起作用,只需使用~/.bashrc而不是~/.bash_profile。
$echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bashrc $echo 'eval "$(jenv init -)"' >> ~/.bashrc $source ~/.bashrc
如果我们在zsh shell上,则安装Jenv的命令是:
$echo 'export 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/theitroad/.jenv/libexec:/home/theitroad/.jenv/shims:/home/theitroad/.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 export
我们应该重新启动当前shell会话以激活Jenv Export插件Echo Export插件激活。
要重新启动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/theitroad/.jenv/libexec:/home/theitroad/.jenv/shims:/home/theitroad/.jenv/bin:/home/theitroad/.jenv/shims:/home/theitroad/.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环境。
使用Jenv在Linux上管理多个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
现在使用命令查看所有可用的Java版本到Jenv:
$jenv versions
示例输出:
* system (set by /home/theitroad/.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可以让我们在全局或者每次目录/项目上设置Java安装,或者在不改变全球版本之间的情况下的每个shell和它们之间切换。
让我们查看当前的Java版本:
$java --version openjdk 14.0.1 2017-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 2017-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)
我们还可以使用别名编号而不是完整版本如下:
$jenv global 13 $jenv global 13.0 $jenv global 13.0.3
所有这三个命令都将使OpenJDK-13设置为全局版本。
设置本地或者每目录的Java环境
有时,我们可能希望为特定项目设置Java环境,而无需更改全局版本。
例如,以下步骤将为我们的项目设置为"theitroad-Java"的本地版本,但不会更改全局版本。
$mkdir theitroad-java $cd theitroad-java $jenv local openjdk64-14.0.1
现在我们的本地环境是OpenJDK-14,但全球Java环境是OpenJDK-13.
同样,我们可以为每个应用程序设置多个不同的Java环境。
只需转到项目的目录并设置我们选择的所需的Java环境并开始构建或者测试应用程序。
这很简单!
设置特定于shell 的Java环境
为当前shell会话设置Java环境,运行:
$jenv shell openjdk64-14.0.1
OpenJDK-14是此特定shell中使用的Java版本。
退出当前shell会话后,以前的全局使用的Java版本将生效。
无需设置$java_home!
我们是否注意到在切换到不同的Java版本时我从未设置$java_home变量?
不,甚至没有一次! Jenv将根据我们所在的Java环境自动为我们设置。
我们可以使用命令查看Java_Home变量的当前设置:
$echo $JAVA_HOME /home/theitroad/.jenv/versions/openjdk64-13.0.3
现在忘掉如何设置JAVA_HOME环境变量,只要专注于您的开发即可。