Java 环境安装与配置(JDK/JRE、JAVA_HOME、PATH)深度指南【2026 最新】
大约 5 分钟
Java 环境安装与配置(JDK/JRE、JAVA_HOME、PATH)深度指南
你将收获
- 新手:最快速、不踩坑地在 Windows/macOS/Linux 跑起 Java
- 进阶:理解 JAVA_HOME/Path 背后的查找与解析原理、JDK 模块化与工具链
- 架构师:在容器/CI/CD 场景做最小化运行时裁剪、统一多版本治理与安全合规
新手先看 · 10 分钟速览
- 选版本:用 Temurin JDK 17(LTS),开发与线上保持一致
- 配变量:设置 JAVA_HOME 指向 JDK 根;把 $JAVA_HOME/bin 加到 PATH
- 验证:java -version 与 javac -version 都能输出版本号即可
一句话记忆:JAVA_HOME 指向“家”,PATH 把“家/bin”加入搜索路径。
为什么要选对 JDK 发行版
- 兼容性:不同发行版的补丁节奏/安全修复略有差异
- 合规与授权:Oracle JDK 商用授权策略变化频繁,企业常选开源发行版(Temurin/Corretto/龙井)
- 支持与生态:云厂商维护的发行版(Corretto/Dragonwell)与其服务生态更匹配
主流选择(推荐按顺序优先度):
- Adoptium Temurin(社区主流、免费、稳定)
- Amazon Corretto(企业友好、长期维护)
- Alibaba Dragonwell(在国内云环境表现稳定)
- Oracle JDK(需关注授权成本与合规)
版本策略:
- 开发与生产统一采用 LTS(JDK 17 或 21)
- 非 LTS 仅用于实验与新特性验证
安装与多版本管理(跨平台)
Windows
- 下载 JDK:到 Adoptium(Temurin)或 Oracle 官网
- 双击安装,记住安装目录,例如:
C:\Program Files\Java\jdk-17 - 配置系统环境变量:
- 新建
JAVA_HOME=C:\Program Files\Java\jdk-17 - 编辑
Path,追加:%JAVA_HOME%\bin
- 新建
- 新开终端验证:
java -version
javac -versionmacOS(Homebrew)
brew update
brew install openjdk@17
sudo ln -sfn /usr/local/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)' >> ~/.zshrc
echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
java -version && javac -versionLinux(Ubuntu/Debian)
sudo apt update
sudo apt install -y openjdk-17-jdk
java -version
javac -version多版本并存与切换
- macOS:
- 查看:
/usr/libexec/java_home -V - 指定:
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
- 查看:
- Linux:
sudo update-alternatives --config java- 同步设置 javac:
sudo update-alternatives --config javac
- Windows:
- 将多个版本目录命名规范化,通过切换
JAVA_HOME指向完成
- 将多个版本目录命名规范化,通过切换
JDK 模块化与工具链速览
- 工具族谱:
java运行期、javac编译器、jlink运行时打包、jpackage安装包生成- 诊断:
jps/jcmd/jstack/jmap/jstat/jfr,线上排障必备
- 模块化(Jigsaw):
- JDK 已按模块组织,可通过
jlink裁剪生成最小运行时,降低镜像体积与攻击面
- JDK 已按模块组织,可通过
示例:用 jlink 生成仅包含 java.base 和 jdk.crypto.ec 的最小运行时
jlink \
--add-modules java.base,jdk.crypto.ec \
--output ./runtime-min \
--strip-debug --compress=2 --no-header-files --no-man-pages
./runtime-min/bin/java -versionJAVA_HOME / PATH 的本质
JAVA_HOME指向 JDK 根目录PATH通过把%JAVA_HOME%/bin(或$JAVA_HOME/bin)加入系统 PATH,使 shell 能找到java/javac- 验证查找顺序(以 Unix 为例):
which java→ 可定位实际使用的二进制echo $PATH→ 确认优先目录位置
字符集与时区的隐性坑
最近建一些几十个工作内推群,各大城市都有,群里目前已经收集了很多内推岗位,大厂、中厂、小厂、外包都有。 欢迎HR、开发、测试、运维和产品加入。

扫描下方微信,备注:网站+所在城市,即可拉你进工作内推群。

- 默认字符集依赖系统区域设置,推荐显式指定:
- 运行参数:
-Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN
- 运行参数:
- 容器化时区:
- 指定:
-Duser.timezone=Asia/Shanghai - 容器内挂载
tzdata或设置TZ=Asia/Shanghai环境变量
- 指定:
容器与 CI/CD 场景最佳实践
- 构建时使用完整 JDK;运行时使用 jlink 裁剪后的最小运行时或官方 JRE 基础镜像
- 通过多阶段构建减小镜像体积:
FROM maven:3.9-eclipse-temurin-17 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn -B -q -DskipTests dependency:go-offline
COPY src ./src
RUN mvn -B -q -DskipTests package
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
ENTRYPOINT ["java","-XX:+UseContainerSupport","-jar","/app/app.jar"]白话解释:JDK、JRE、JAVA_HOME 与 PATH
- JDK = 工具箱(含 javac 编译器、jlink 等),JRE = 仅运行环境(不含编译器)
- JAVA_HOME = 你把“工具箱”放在哪里;PATH = 让系统知道去哪里找“工具”
- 为什么要设置环境变量?为了在任意目录都能执行
java/javac
常见错误排查清单
- “不是内部或外部命令”/
command not found- 检查 PATH 是否包含
$JAVA_HOME/bin,新开终端或source生效
- 检查 PATH 是否包含
JAVA_HOME指向了 JRE- 必须指向 JDK 根(包含
bin/javac)
- 必须指向 JDK 根(包含
- 多版本冲突
- macOS 用
/usr/libexec/java_home -V,Linux 用update-alternatives,Windows 调整环境变量顺序
- macOS 用
- “证书/HTTPS 调用失败”
- 确认根证书链完整,可尝试更新 CA 或将证书导入 JDK cacerts(测试环境可用)
新手 FAQ
Q:我只安装了 JRE 能写代码吗?
A:不行。需要 JDK,因为编译器 javac 只在 JDK 里。
Q:我设置了 JAVA_HOME,但 java -version 仍失败?
A:还需要把 $JAVA_HOME/bin 加入 PATH,并重新打开终端。
Q:Windows 上到底该用系统变量还是用户变量?
A:统一设置为“系统变量”,团队机器可读性更好;至少保证 Path 中优先级正确。
进阶练习
- 用 jlink 为你的 Spring Boot Demo 生成最小运行时并运行
- 编写一个脚本,自动切换
JAVA_HOME至不同版本并打印java -version - 在 Docker 中运行你的 Java 程序,确保字符集与时区输出正确(中文日志不乱码)
