linux下jenv配置使用

linux下jenv配置使用

目的

  • 因开发需求需要配置多个java环境,遂使用jenv进行java的版本管理

jenv简介

  • jenv可以切换多个不同的java版本环境,比如说可以在java8和java11之间进行切换
  • jenv是通过设置java_home来达成这一目的的.这意味着这种切换是全局性的,不仅是在你的工程之中进行了切换,还在你的shell中也完成了切换

本机系统配置

  • nobara
  • i5-11300H+16G+2T

安装步骤

java包下载

本文对java1.8及java21进行相应测试,均使用tar.gz包进行安装.java包的下载地址推荐使用国内镜像进行下载

$> sudo cp %java-version.tar.gz% /opt
$> cd /opt
$> tar -xzvf %java-version.tar.gz%

效果如图所示

解压示例

其中,jdk1.8.0_202jdk-21.0.1为解压后的文件

jenv下载及安装

$> git clone https://github.com/jenv/jenv.git ~/.jenv
# Shell: bash
$> echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$> echo 'eval "$(jenv init -)"' >> ~/.bash_profile

以上来自于jenv github页面

因在nobara中,~/.bashrc的生效优先级高于~/.bash_profile,本文将echo的内容调整至~/.bashrc中,如下图所示

~/.bashrc文件示意

在shell中执行source ~/.bashrc并重启shell,即可完成安装

jenv配置

在前两步的基础之上需要使用jenv将java环境配置起来

$> jenv add /opt/jdk1.8.0_202/bin
$> jenv add /opt/jdk-21.0.1/bin

配置成功后如下所示

$> jenv versions
  system
  17
* 17.0 (set by /home/soap/.jenv/version)
  17.0.8
  1.8
  1.8.0.202
  21
  21.0
  21.0.1
  openjdk64-17.0.8
  openjdk64-21.0.1
  oracle64-1.8.0.202
$> java -version
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (Red_Hat-17.0.8.0.7-1.fc38) (build 17.0.8+7)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.8.0.7-1.fc38) (build 17.0.8+7, mixed mode, sharing)

上文表示jenv所管理的java环境以及对应的java版本号

使用jenv global %version%切换版本号

$> jenv global 21.0
$> java -version
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-29)
OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)

上文将原来的java17环境切换成了java21

安装成功与否检测

$> jenv doctor
[OK]    JAVA_HOME variable probably set by jenv PROMPT
[OK]    Java binaries in path are jenv shims
[OK]    Jenv is correctly loaded

三项都报ok即可,注意需要删除JAVA_HOME,否则maven的jdk版本会以设置的JAVA_HOME为准,jenv所设置的jdk环境在maven中无法生效

jenv项目解析

  • 进入项目目录查看内容
$> jenv versions
  system
  17
  17.0
  17.0.8
  1.8
  1.8.0.202
  21
* 21.0 (set by /home/soap/.jenv/version)
  21.0.1
  openjdk64-17.0.8
  openjdk64-21.0.1
  oracle64-1.8.0.202

可以看到jenv versions数据其中有一项为

  • 21.0 (set by /home/soap/.jenv/version)

可以看到这个版本是根据home/soap/.jenv/version来设置的,进入~/.jenv查看version的内容

$> ls
17.0.8.time  1.8.0.202.time  21.0.time          bin          jenv.version  openjdk64-17.0.8.time    plugins       shims    versions
17.0.time    1.8.time        21.time            completions  libexec       openjdk64-21.0.1.time    README.md     test
17.time      21.0.1.time     available-plugins  fish         LICENSE       oracle64-1.8.0.202.time  run-tests.sh  version
$> cat version
21.0

version作为一个文本文件里面的内容即为21.0

查看versions里的内容

$> cd versions
$> ls -al
total 44
drwxr-xr-x 1 soap soap 172 12月18日 22:01 .
drwxr-xr-x 1 soap soap 572 12月18日 22:01 ..
lrwxrwxrwx 1 soap soap  10 12月14日 16:40 17 -> /home/soap
lrwxrwxrwx 1 soap soap  10 12月14日 16:40 17.0 -> /home/soap
lrwxrwxrwx 1 soap soap  10 12月14日 16:40 17.0.8 -> /home/soap
lrwxrwxrwx 1 soap soap  17 12月14日 16:53 1.8 -> /opt/jdk1.8.0_202
lrwxrwxrwx 1 soap soap  17 12月14日 16:53 1.8.0.202 -> /opt/jdk1.8.0_202
lrwxrwxrwx 1 soap soap  15 12月18日 22:01 21 -> /opt/jdk-21.0.1
lrwxrwxrwx 1 soap soap  15 12月18日 22:01 21.0 -> /opt/jdk-21.0.1
lrwxrwxrwx 1 soap soap  15 12月18日 22:01 21.0.1 -> /opt/jdk-21.0.1
lrwxrwxrwx 1 soap soap  10 12月14日 16:40 openjdk64-17.0.8 -> /home/soap
lrwxrwxrwx 1 soap soap  15 12月18日 22:01 openjdk64-21.0.1 -> /opt/jdk-21.0.1
lrwxrwxrwx 1 soap soap  17 12月14日 16:53 oracle64-1.8.0.202 -> /opt/jdk1.8.0_202

该目录下文件均为链接文件,指向对应的java目录,其中,17.0为系统自带java,1.8以及21.0为上文所解压的java

推测是通过更改链接文件来实现对java版本号的管理

posted @ 2023-12-18 22:31  五花肉炒河粉  阅读(409)  评论(0)    收藏  举报