jdk多版本管理

4,251 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

作为一枚JAVA后端开发工程师,在日常的开发过程中,经常需要根据不同的项目选择不同版本的jdk。jdk当前也存在多个稳定的版本,比如jdk1.8、jdk11、jdk14,还有最新的jdk17。

那么如何安装不同版本的jdk,并对jdk版本进行简单的管理呢?本文给出一些经验。

使用jenv进行jdk多版本管理

jenv是一款用于管理jdk版本的工具,官网:www.jenv.be/

(1)使用homebrew下载jenv

brew install jenv

(2)验证是否安装成功

jenv

结果如下,说明已经成功安装了0.5.5版本的jenv

jenv 0.5.5
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

(3)配置jenv环境变量

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

jdk版本管理

(1)查看电脑上存在的JDK版本:

/usr/libexec/java_home -V

执行结果如下:

Matching Java Virtual Machines (6):
    17.0.2 (x86_64) "Oracle Corporation" - "OpenJDK 17.0.2" /Users/yin.bai/Library/Java/JavaVirtualMachines/openjdk-17.0.2/Contents/Home
    14.0.2 (x86_64) "AdoptOpenJDK" - "OpenJDK 14.0.2" /Users/yin.bai/Library/Java/JavaVirtualMachines/adopt-openjdk-14.0.2/Contents/Home
    11.0.10 (x86_64) "Oracle Corporation" - "Java SE 11.0.10" /Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home
    1.8.281.09 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
    1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

(2)查看被jenv管理的jdk,目前为空,即所有的jdk都没有被jenv管理

 jenv versions

(3)添加jdk到jenv管理

比如我们添加jdk1.8.9.281到jenv:

 jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

如果出现类似"ln: /Users/userName/.jenv/versions/oracle64-1.8.0.281: No such file or directory"报错,说明当前不存在~/.jenv/versions文件夹,需要创建:

 cd ~
 mkdir .jenv
 cd .jenv
 mkdir versions

然后继续执行jenv add命令进行添加,添加成功显示:

 oracle64-1.8.0.281 added
 1.8.0.281 added
 1.8 added
  1.8.0.281 already present, skip installation

(5)添加成功之后可以查看被jenv管理的jdk版本

 jenv versions

执行结果如下,这里我又添加了jdk11到jenv管理

 * system (set by /Users/yin.bai/.jenv/version)
   1.8
   1.8.0.281
   11.0
   11.0.10
   oracle64-1.8.0.281
   oracle64-11.0.10

(6)切换jdk版本

切换jdk版本有三个作用域,分别是global、local、shell。

  • Global

global表示切换全局的jdk,相当于永久修改java home,切换结果全局生效。

 jenv global 11.0
  • local

local表示在当前目录下进行切换,只对当前目录生效

 jenv local 11.0
  • shell

shell表示只在当前shell生效,对于其他的shell不生效,相当于临时切换java home

 jenv shell 11.0

切换后可以使用jenv versionsjava -version查看

切换java home

(1)查看本机安装的所有jdk版本

/usr/libexec/java_home -V

在我的机器上执行的结果如下:表示存在6个不同的版本

Matching Java Virtual Machines (6):
    17.0.2 (x86_64) "Oracle Corporation" - "OpenJDK 17.0.2" /Users/yin.bai/Library/Java/JavaVirtualMachines/openjdk-17.0.2/Contents/Home
    14.0.2 (x86_64) "AdoptOpenJDK" - "OpenJDK 14.0.2" /Users/yin.bai/Library/Java/JavaVirtualMachines/adopt-openjdk-14.0.2/Contents/Home
    11.0.10 (x86_64) "Oracle Corporation" - "Java SE 11.0.10" /Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home
    1.8.281.09 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
    1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
    1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home

(2)临时切换,在当前shell有效。假设我们切换到jdk11,则执行如下命令:

export JAVA_HOME=`/usr/libexec/java_home -v 11`

(3)永久切换

对于使用bash的小伙伴,需要更新~/.bash_profile文件的配置,执行如下命令:

echo 'export JAVA_HOME=`/usr/libexec/java_home -v 11`' >> ~/.bash_profile
source ~/.bash_profile

对于使用zsh的小伙伴,执行如下命令:

 echo 'export JAVA_HOME=`/usr/libexec/java_home -v 11`' >> ~/.zshrc
 source ~/.zshrc

(4)切换完成之后,可以在新的shell中执行如下命令验证:

java --version

如果出现类似如下信息,说明切换成功

java 11.0.10 2021-01-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.10+8-LTS-162)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.10+8-LTS-162, mixed mode)