【2026版】macOS 使用 Homebrew 快速安装 Java 21 教程

在 macOS 上配置 Java 环境时,很多开发者会遇到 no bottle available 或环境变量配置失效的问题。本文将介绍目前最稳定、最推荐的安装方式:使用 Homebrew Cask 安装 Eclipse Temurin

为什么选择 Temurin?

  • 兼容性好:前身为 AdoptOpenJDK,是目前最主流的 OpenJDK 发行版。
  • 安装简单:使用 Cask 安装会自动放入系统目录,无需手动配置繁琐的 PATH
  • 识别率高:IntelliJ IDEA、Eclipse 等 IDE 可以直接识别,无需寻找隐藏路径。

🚀 安装步骤

1. 确保 Homebrew 已更新

在安装任何新软件包之前,建议先更新 Homebrew 索引:

brew update 

2. 执行安装命令

直接在终端输入以下正确命令:

brew install --cask temurin@21 

注:使用 --cask 会直接下载预编译好的 .pkg 安装包,避开复杂的源码编译过程。

3. 验证安装

安装完成后,无需重启电脑,只需新开一个终端窗口或执行 source,然后输入:

java -version 

预期输出:

openjdk version “21.x.x” …
Runtime Environment Temurin-21…

🛠 进阶技巧:多版本管理

如果你电脑上同时需要 Java 8, 11 和 21,可以按照以下逻辑操作:

1. 安装其他版本

brew install --cask temurin@8 brew install --cask temurin@17 

2. 快速切换版本

macOS 提供了一个强大的工具 /usr/libexec/java_home 来定位不同版本。你可以通过在 ~/.zshrc 中添加别名来快速切换:

# 编辑配置文件nano ~/.zshrc # 添加以下内容(按需开启)exportJAVA_21_HOME=$(/usr/libexec/java_home -v 21)exportJAVA_8_HOME=$(/usr/libexec/java_home -v 1.8)# 默认使用 Java 21exportJAVA_HOME=$JAVA_21_HOME# 保存退出后运行source ~/.zshrc 

❓ 常见问题排查

  • 提示 “Permission Denied”?
    安装 Cask 软件通常需要系统管理员权限,请在提示时输入你的 Mac 开机密码。
  • IDE 找不到 JDK?
    Temurin 默认安装在 /Library/Java/JavaVirtualMachines/。在 IntelliJ IDEA 中,点击 Project Structure -> SDKs -> + 号,直接指向该目录即可。
  • 之前手动删过 Java 删不干净?
    如果之前乱删导致安装失败,可以参考 macOS 完全卸载 Java 教程 先进行彻底清理。

Read more

【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

【Java 开发日记】为什么要有 time _wait 状态,服务端这个状态过多是什么原因?

目录 为什么要有 TIME_WAIT 状态? 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 原因二:让旧连接的重复报文段在网络中自然消失(防止影响新连接) 服务端 TIME_WAIT 状态过多是什么原因? 原因一:服务端使用了短连接,并且是它主动关闭连接 原因二:客户端的非正常行为 原因三:负载均衡器的健康检查 总结 面试回答 为什么要有 TIME_WAIT 状态? TIME_WAIT,俗称2MSL等待状态,是TCP连接主动关闭一方(通常是客户端,但也可能是服务端)在发送最后一次ACK确认报文后,会进入的一个状态。它需要等待2倍的最大报文段生存时间后,才会最终进入CLOSED状态,释放连接资源。 设计TIME_WAIT状态主要有两个核心原因,它们是确保TCP协议可靠性的基石: 原因一:可靠地终止TCP连接(确保最后的ACK能到达对方) 这是最主要的原因。让我们回顾一下TCP四次挥手的正常流程: 1. 主动关闭方(假设为A)

By Ne0inhk
史上最全的java使用cursor开发教程!--idea+cursor 实现java双端开发--接入最新claude3.7模型

史上最全的java使用cursor开发教程!--idea+cursor 实现java双端开发--接入最新claude3.7模型

目录 * 导言: * 1.cursor工具安装 * 2.idea插件安装 * 3.claude-agent模式下一些好用的提示词 * 4.cursor的一些便捷设置 * 5.目前cursor的一些不方便的地方吐槽 导言: 由于cursor基于vscode模式开发的编译器,但是一些环境适配的不是很好,还有调试的信息显示不全,所以一般我们回idea进行代码调试,以下插件就是为了解决双端开发的问题 写代码可以在cursor上借助AI进行编程,调试在idea上 如果真的适应在cursor上调试其实也能用,但是我用的特别扭,还是建议在idea上调试 cursor调试如下图: 1.cursor工具安装 (1)Swithc2IDEA 使用快捷键alt+shfit+O 可以快速跳转到idea文件,并将代码行光标同步为cursor位置 目前这个插件可能会有bug产生,无法跳转到idea中 解决方案:在插件设置里设置idea客户端的地址 (2)Extension Pack for Java 这个是必装的,里面包含了java开发所需要的很多环境,有了它就可以让我

By Ne0inhk
告别 IDEA,拥抱 Trae:一位 Java 后端程序员的真实迁移体验

告别 IDEA,拥抱 Trae:一位 Java 后端程序员的真实迁移体验

作为一名常年和 Spring Boot、微服务打交道的 Java 开发者,IDEA 几乎是我过去几年的 “本命 IDE”。但最近,我彻底把主力开发环境换成了Trae。这不是跟风尝鲜,而是真实体验到效率、流畅度与 AI 能力的全面升级。 这篇文章,我用最实在的体验,告诉你Java 程序员从 IDEA 迁移到 Trae 到底值不值、怎么迁、踩过哪些坑、带来哪些爽点。 一、为什么我会从 IDEA 转向 Trae? 先说说我放弃 IDEA 的核心原因: 1. 启动慢、吃内存:项目稍大就卡,开机启动要等半天 2. 插件臃肿:很多功能用不上,却占资源 3. AI 能力弱:自带补全跟不上时代,装插件又不稳定

By Ne0inhk
JAVA 异常处理:从原理到实战最佳实践

JAVA 异常处理:从原理到实战最佳实践

JAVA 异常处理:从原理到实战最佳实践 1.1 本章学习目标与重点 💡 掌握异常的分类与核心概念,理解异常处理的设计思想。 💡 熟练运用 try-catch-finally、throws、throw 处理异常。 💡 掌握自定义异常的编写与使用场景,规范异常处理流程。 ⚠️ 本章重点是 异常处理的最佳实践 和 避免常见误区,这是提升代码健壮性的核心技能。 1.2 异常的核心概念与分类 1.2.1 什么是异常 💡 异常是指程序运行过程中出现的非正常情况,它会中断程序的正常执行流程。 比如文件找不到、数组下标越界、空指针访问等,这些情况都会触发异常。 Java 中所有异常都是 Throwable 类的子类,异常处理的本质是捕获并处理这些非正常情况,保证程序可以继续运行或优雅退出。 1.2.2 异常的分类 Java 中的异常体系分为三大类,它们的父类都是 Throwable: * 是 JVM 内部的严重错误,

By Ne0inhk