Mac上动态切换JDK

news2024/9/22 19:44:18

起因:

因为甲骨文的JDK8并没有适配Mac M1芯片,新版的17倒是有适配的,11这些不清楚。往常开发可以使用Zulu这些厂商提供的JDK8。

但是在本地起一些服务,例如Nacos时候,还是会出现不兼容导致起不来!虽然Nacos1.4版本是可以使用Zulu JDK8启动的,奈何我需要新版的Nacos测试。

当然你也可以采用本地Docker或者开虚拟机的方式去运行,在Linux上面Arm支持还是挺好的,使用下来也没有什么明显的区别!

终究还是太麻烦了,不如本地直接起服务会方便一些!这个时候就需要到再M1机器上使用X64的JDK了,非天然支持。此时动态切换本地机器上的JDK版本就需要一个优雅的解决方式!

我在网上也找了一些,但是都不够天然的优雅,原因是Mac里面有自带的一个java_home,使用它的话会便捷很多!位置在 /usr/libexec/java_home,而它可用于返回、设置 $JAVA_HOME,也可以用于执行命令。如果你感兴趣可以了解一下!

借鉴的原文地址:
https://medium.com/notes-for-geeks/java-home-and-java-home-on-macos-f246cab643bd

说下缺点性能损耗
根据Github上面评论所说,在M1机器上本地使用X64 JDK启动Nacos,性能回到上代 i5 ~i7 之间水平,启动时间相比 zulu JDK 延长 5 倍左右!

评论地址:https://github.com/alibaba/nacos/issues/4336
评论地址:https://github.com/alibaba/nacos/issues/4336

解决方式:

确定好你使用的是bash还是zsh,以及它们的配置文件,我这里使用的是zsh,写在了home目录下的 .zprofile 文件中,如果你用的是M芯片的Mac,几乎不用怀疑就是zsh。如果你好奇zsh到底有哪些配置文件,到底用哪个,那可以看下面链接描述(大致看一眼就行了,知道多了心烦):https://unix.stackexchange.com/questions/71253/what-should-shouldnt-go-in-zshenv-zshrc-zlogin-zprofile-zlogout
在这里插入图片描述
然后配置文件中这样写:

# 动态Java环境变量
alias setJDK17='export JAVA_HOME=`/usr/libexec/java_home -v 17.0.6`'
alias setJDK8='export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_351`'
alias setarmJDK8='export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_352`'
# set to the default JDK
export JAVA_HOME=`/usr/libexec/java_home`

在这里插入图片描述
如果你不知道如何确定你的JDK版本有哪些,可以这样做:

/usr/libexec/java_home -V

在这里插入图片描述
之后:

source ~/.zprofile

然后就可以使用了,当然你可以把命令换成其他的,并非需要与我一致,之后每次使用时候直接输入一下命令切换就可以了!使用方式如下:
在这里插入图片描述
Done!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络原理6】数据链路层协议——以太网

数据链路层负责的是相邻两个网络节点之间的数据以帧为单位进行传输。 具体关于数据链路层的介绍,已经在这一篇文章当中提到了。 初识网络:IP、端口、网络协议、TCP-IP五层模型_革凡成圣211的博客-CSDN博客TCP/IP五层协议详解https://blog.csdn.net/weix…

Python每日一练(20230219)

目录 1. 循环随机取数组直到得出指定数字? 2. 旋转链表 3. 区间和的个数 1. 循环随机取数组直到得出指定数字? 举个例子: 随机数字范围:0~100 每组数字量:6(s1,s2,s3,s4,s5,s6) 第二轮开始随…

高级前端一面面试题集锦

详细说明 Event loop 众所周知 JS 是门非阻塞单线程语言,因为在最初 JS 就是为了和浏览器交互而诞生的。如果 JS 是门多线程的语言话,我们在多个线程中处理 DOM 就可能会发生问题(一个线程中新加节点,另一个线程中删除节点&#…

[LeetCode周赛复盘] 第 98 场双周赛20230219

[LeetCode周赛复盘] 第 98 场双周赛20230219 一、本周周赛总结二、 [Easy] 6359. 替换一个数字后的最大差值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6361. 修改两个元素的最小分数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6360. 最小无法得到的或值1. 题目描述2…

将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码

之前遇到过“镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for field “intensity“ 问题”, 当时确定了是镭神C32雷达缺少相应字段,并记录博客【学习记录】镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for fi…

如何正确使用chatgpt,让chatgpt回答优质内容?

我们以chatgpt写一篇文章为例。大家都知道,如果直接让chatgpt写某篇文章,他的回答总是简洁明了的,因为它定位就是聊天,而不是会像“舔狗”一样写一篇小作文。 并且他的回答,总是固定格式的,只要稍微了解ch…

Kubernetes02:知识图谱

Kubernetes01:知识图谱 MESOS APACHE 分布式资源管理框架 2019-5 Twitter 》 Kubernetes Docker Swarm 2019-07 阿里云宣布 Docker Swarm 剔除 Kubernetes Google 10年容器化基础架构 borg Go语言 Borg 特点 轻量级:消耗资源小 开源 弹性伸缩 负载均…

根据mysql的sql文件逆向生成powerdesigner的pdm文件

背景 我们在软件项目中最基本的组成部分就是数据库,那么在有数据库文件的情况下如何将库表逆向生成powerdesigner的设计文件呢? 文字步骤 打开powerdesigner软件,然后选择 File ->ReverseEngineer ->Database (1&#x…

OnlyOffice本地部署实现Excel预览(docker安装)

下载onlyoffice镜像 docker pull onlyoffice/documentserver 如果下载不了 可以尝试添加镜像 /etc/docker daemon.json文件内 添加一行 {“registry-mirrors”: [“http://f1361db2.m.daocloud.io”]} 启动镜像 (第一个17315表示onlyoffice服务对外的端口号&…

[AUTOSAR][Fls模块] Flash Driver Module

Flash Driver Module--jianqiang.xue一、 简介二、 措施方式一:将FLASH操作程序作为Bootloader组件的一部分固化在存储器中方式二:通过通讯口将该部分代码从上位机下载到指定的RAM方式三:将Flash功能函数作为数据运行(推荐!&#…

23种设计模式介绍(Python示例讲解)

文章目录一、概述二、设计模式七种原则三、设计模式示例讲解1)创建型模式1、工厂模式(Factory Method)【1】简单工厂模式(不属于GOF设计模式之一)【2】工厂方法模式2、抽象工厂模式(AbstractFactory&#x…

Python抽奖系统

#免费源码见文末公众号# 抽奖系统① def choujiang1():def write():with open(d:\\抽奖系统\\抽奖1.1.pickle,rb) as file:lst1pickle.load(file)namevar1.get()if name not in lst1 and name!录入成功! and name!录入失败! and name!:lst1.append(name)…

基于springboot+vue的便利店库存管理系统

基于springbootvue的便利店库存管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景…

C++面向对象(上)

文章目录前言1.面向过程和面向对象初步认识2.引入类的概念1.概念与用法2.类的访问限定符及封装3.类的作用域和实例化4.类的大小计算8.this指针3.总结前言 本文将对C面向对象进行初步介绍,引入类和对象的概念。围绕类和对象介绍一些基础知识,为以后深入学…

【数据结构】————栈

文章目录前言栈是什么,栈的特点实现栈的基本操作栈的相关操作声明1.创建栈2.对栈进行初始化3.销毁栈4.判断栈是否为空5.压栈操作6.删除栈顶元素7.取出栈顶元素8.计算栈内存放多少个数据总结前言 本文主要讲述特殊的线性表——栈: 栈是什么,栈…

学生信息管理系统(通讯录)----------通俗易懂、附源码、C语言实现

绪论: 本篇文章使结构体章节后的习题,如果你对C语言有问题,或者结构体有什么问题不妨看看我之前所写的文章(章回体),对于文件管理和内存分配问题我将在后面补上,对于这个学生信息管理系统我用了多种方法和…

五【Spring】控制反转(IOC)

目录一 Ioc控制反转1.1 概述1.2 依赖注入二 传统依赖的问题2.1 在传统的项目中三 引入Spring解决3.1 Spring配置文件中Bean属性3.2 Bean的作用域3.3 项目案例四 基于xml的依赖注入(注意有参 无参的构建)4.1 设置注入4.2 构造注入(依赖有参构造…

【Java面试总结】MySQL篇·优化篇

【Java面试总结】MySQL篇SQL优化篇1.该如何优化MySQL的查询?2.怎样插入数据才能更高效?3.表中包含几千万条数据该怎么办?4.MySQL的慢查询优化有了解吗?5.说一说你对explain的了解6.explain你一般关注什么?1.该如何优化…

【Linux】网络编程 - Socket套接字/基于UDP的网络通信

目录 一.套接字 1.什么是套接字/Socket套接字 2.套接字的分类 3.Socket套接字的常见API 二.网络字节序 1.什么是网络字节序 2.网络字节序和主机字节序的转换接口 三.IP地址形式上的转换 四.客户端的套接字不由程序员bind 1.为什么客户端套接字不能由程序员bind 2.OS…

【题外话】如何拯救小米11Pro这款工业垃圾

1 背景媳妇用小米11Pro手机,某日不慎摔落,幸好屏幕未碎,然而WiFi却怎样都无法打开,初以为是系统死机,几天依旧故障无法使用。现在的手机没有WiFi功能,就无法刷抖音、看视频,就是鸡肋了。后抽空去…