Mac/Linux之使用Jenv切换java版本

前言

众所周知,随着java版本的不断升级,jdk版本越来越高,但是互联网开发软件很多还维持在jdk1.8的时代
但是很多开源软件只至此java 11以上的版本,这就会导致很多程序上的不兼容或者报错

本文主要解决,linux不同目录下,采用不同的jdk,且不用切换jdk,极度灵活

jenv优点:简单、灵活

安装JENV

Git方式安装

apt-get update -y
apt-get install git -y


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

Mac 安装jenv可以使用brew

brew install jenv

  查看所有已安装的 jdk : /usr/libexec/java_home -V

配置文件

ubuntu默认的配置文件是~/.bashrc文件;centos一般是编辑/etc/profile文件

  bashrc配置方式:

# 这里我们直接以`ubuntu`为准,vim这个文件(`~/.bashrc`)即可
vim ~/.bashrc

#这里直接注释jdk默认环境配置,将采用jenv灵活管理jdk
#set oracle jdk environment
#export JAVA_HOME=/home/bin/jdk1.8.0_191
#export JRE_HOME=${JAVA_HOME}/jre
#export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
#export PATH=${JAVA_HOME}/bin:$PATH
 
 
# Jenv
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

  zsh配置方式:

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

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

  bash配置方式:

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

  重点:如果你之前安装过jdk,并且配置过jdk的环境变量,直接注释,否则jenv会不生效

source ~/.bashrc

验证

$ jenv help
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

管理jdk

添加jdk

  添加jdk(路径从 /usr/libexec/java_home -V 的结果看)

jenv add /Library/Java/JavaVirtualMachines/corretto-17.0.7/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home

设置全局环境jdk

jenv global 1.8

设置目录层级jdk

jenv local 11

  执行成功后,当前目录下会生成一个.java_version的隐藏文件

PS

命令
#查看当前的 Java 版本
jenv version
#列出目前 jenv 所有可切换管理的版本
jenv versions

#手动添加本地的 Java Home 路径
jenv add /Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/

#global 全局设置 一般不建议改变全局设置
jenv global <java 版本>

#shell 会话设置 只影响当前的shell会话
jenv shell <java 版本>
#取消 shell 会话的设置
jenv shell --unset

#local 本地设置 只影响所在文件夹
jenv local <java 版本>
配置文件
#jenv start
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

alias jdk8='jenv global 1.8'
alias jdk13='jenv global 13.0'
alias jdk17='jenv global 17.0'
alias jdk8_tmp='jenv local 1.8'
alias jdk13_tmp='jenv local 13.0'
alias jdk20_tmp='jenv local 17.0'

# jenv END

# 快捷命令:jdk8
jenv管理JDK版本的时候,使用maven出现了问题:
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.

  此时需要开启jenv的maven插件支持。

jenv enable-plugin maven


文献
Linux的JDK和Jenv(JAVA_HOME管理器)的详细配置使用教程原创
Java 多版本管理工具(自由切换Java版本)Jenv使用(支持Linux Mac Windows)
jenv切换环境