Java多版本环境共存配置

文章目录

  • [1. jenv是什么?](#1. jenv是什么?)
  • [2. 安装](#2. 安装)
  • [3. 配置](#3. 配置)
  • 4.多版本切换
  • [5. 总结](#5. 总结)

现在已经基本过了那句"他发由他发,我用Java8"的时代了,越来越多的开发者开始拥抱Java11,Java17(毕竟spring boot 3要求最低这个版本了),Java 21也已经release了。
我在 Mac OS上JDK8更换JDK11已经介绍了一种升级的方法。但是今天想要介绍一个新的可以让多个版本Jdk 共存且可以互相切换的工具-jenv。

1. jenv是什么?

简单来说,jenv就是一个可以用命令行来配置Java环境的工具。配置环境变量的本质,就是配置不同的jdk所有位置。

2. 安装

如果已经安装了homebrew,那就直接用brew安装。

bash 复制代码
brew install jenv

没有安装的话,也可以直接使用下载到本地

bash 复制代码
git clone https://github.com/jenv/jenv.git ~/.jenv

我这里使用brew安装。没有梯子可能安装会慢很多。

3. 配置

可以使用指令

bash 复制代码
jenv doctor

查看jenv是否安装好了,如果没有安装好会有提示

bash 复制代码
 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 : /usr/local/Cellar/jenv/0.5.5_2/libexec/libexec:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Users/yuanyao/tools/maven/bin
[ERROR]	Jenv is not loaded in your zsh
[ERROR]	To fix : 	echo eval "$(jenv init -)" >> /Users/yy/.zshrc
➜  ~ echo eval "$(jenv init -)" >> /Users/yy/.zshrc

执行完上面的操作后,还要再刷新一下zsh的session:

  • 关闭当前iterm2,再打开一个新的
  • 执行 source ~/.zshrc
    执行完以后,我们可以看到jenv已经好了:
bash 复制代码
source ~/.zshrc
jenv has been updated, process to refresh plugin links
➜  ~ jenv doctor
[OK]	No JAVA_HOME set
[OK]	Java binaries in path are jenv shims
[OK]	Jenv is correctly loaded

然后再把安装好的多个版本的jdk进行配置

bash 复制代码
  ~ jenv add /Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home
oracle64-11.0.12 added
11.0.12 added
11.0 added
 11.0.12 already present, skip installation
➜  ~ jenv add /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
oracle64-21.0.1 added
21.0.1 added
21.0 added
 21.0.1 already present, skip installation

这样我们就配置好了jdk11和jdk21。我们可以使用jenv versions查看所有纳入管理的jdk版本

bash 复制代码
jenv versions
* system (set by /Users/yy/.jenv/version)
  11.0
  11.0.12
  21.0
  21.0.1
  oracle64-11.0.12
  oracle64-21.0.1

4.多版本切换

jenv设置环境有两个级别,一个是global全局级别,一个是local级别,即当前目录及子目录。

bash 复制代码
jenv versions
  system
  11.0
* 11.0.12 (set by /Users/yy/.jenv/version)
  21.0
  21.0.1
  oracle64-11.0.12
  oracle64-21.0.1
➜  ~ java -version
java version "11.0.12" 2021-07-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.12+8-LTS-237)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.12+8-LTS-237, mixed mode)
➜  ~ jenv global 21.0.1
➜  ~ java -version
java version "21.0.1" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing)

5. 总结

jenv的本质就是通过命令行,来指定需要使用的java环境是哪一个,不用这个工具,也可以自己使用export指令来设置JAVA_HOME的值。

相关推荐
小同志007 分钟前
application.properties 和 application.yml
java·spring boot·spring·application.yml·.properities
唐青枫16 分钟前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·spring boot·spring
未秃头的程序猿18 分钟前
别再让大模型单打独斗了!Java 多 Agent 协作实战:任务拆解+结果聚合
java·后端·ai编程
右耳朵猫AI20 分钟前
Java & JVM技术周刊 2026年第20周
java·开发语言·jvm
人道领域22 分钟前
【LeetCode刷题日记】538.把二叉搜索树转换为累加树
java·开发语言·后端·算法·leetcode
铁皮哥23 分钟前
【后端开发】什么是守护线程,和普通线程有什么区别?
java·开发语言·数据库·人工智能·python·spring·intellij-idea
西凉的悲伤25 分钟前
Spring Boot + ShardingSphere 介绍
java·spring boot·后端·shardingsphere·分库分表
Lsk_Smion29 分钟前
力扣实训 _ [33].搜索旋转排序数组 _ [92].翻转链表Ⅱ
java·数据结构·算法
AI人工智能+电脑小能手30 分钟前
【大白话说Java面试题 第86题】【Mysql篇】第16题:MySQL 中锁的种类与行锁实现原理?
java·开发语言·数据库·mysql·面试
日月云棠37 分钟前
12 Enum —— 枚举类型的底层实现
java·后端