在 Windows 环境中手动安装 JDK,本质上就是完成两件事:第一,把 JDK 安装包解压到固定目录;第二,正确配置系统环境变量,让操作系统能够识别 java、javac 等命令,并让后续的开发工具链(IDEA、Maven、Gradle、Tomcat 等)能够定位到 JDK 的安装路径。
本文记录一次 JDK 21 的手动安装过程,以及在 Windows 中需要配置哪些环境变量、每个变量的作用、常见错误和验证方式。
一、JDK 安装目录说明
JDK 已经下载并放置在如下路径:
D:\environment\JDK\jdk-21.0.10
该目录结构通常如下:
bin:核心可执行文件目录(java、javac、javadoc 等)lib:JDK 核心类库conf:JDK 配置文件目录include:JNI 相关头文件jmods:Java 模块系统文件(JDK 9+ 引入)
后续所有环境变量配置都将基于这个目录。
二、为什么必须配置环境变量
如果仅仅把 JDK 解压到某个目录,但没有配置环境变量,那么:
- 在命令行执行
java -version会提示找不到命令 - IDEA / Eclipse / Maven / Gradle 等工具可能无法自动定位 JDK
- 多版本 JDK 共存时,系统会随机使用某个版本,造成版本冲突
因此,配置环境变量是手动安装 JDK 的关键步骤。
三、必须配置的环境变量
手动安装 JDK 21 时,最推荐、最标准的配置方式是:
- 配置
JAVA_HOME - 在
Path中加入%JAVA_HOME%\bin
这两项配置是工业界通用规范,也是各类工具链默认识别的规则。
四、配置 JAVA_HOME(核心变量)
1. JAVA_HOME 的作用
JAVA_HOME 用于指向 JDK 的根目录,是 Java 生态中最关键的环境变量之一。
大量工具默认依赖它,例如:
- Maven 会通过
JAVA_HOME查找 JDK - Gradle 会通过
JAVA_HOME查找 JDK - Tomcat 在启动脚本中常用
JAVA_HOME - Jenkins、Spring Boot、各种 CI/CD 脚本都会优先读取
JAVA_HOME
因此,配置 JAVA_HOME 基本属于必须步骤。
2. JAVA_HOME 的配置值
在 Windows 系统变量中新增变量:
变量名:
JAVA_HOME
变量值:
D:\environment\JDK\jdk-21.0.10
注意:这里必须填写 JDK 的根目录,而不是 bin 目录。错误写法例如:
D:\environment\JDK\jdk-21.0.10\bin
这种写法会导致后续工具无法正确识别 JDK。
五、配置 Path(让系统能直接执行 java/javac)
1. Path 的作用
Path 是 Windows 用来搜索可执行程序的环境变量。
如果 Path 中包含了 Java 的 bin 目录,那么在任意位置打开 CMD 或 PowerShell,都可以直接执行:
javajavacjavadocjar
否则每次执行命令都必须写完整路径,例如:
D:\environment\JDK\jdk-21.0.10\bin\java -version
这显然不适合日常开发。
2. Path 的配置方式
进入系统变量中的 Path,新增一条:
%JAVA_HOME%\bin
这里推荐使用 %JAVA_HOME% 的写法,而不是直接写绝对路径,例如:
D:\environment\JDK\jdk-21.0.10\bin
原因在于:
- 可维护性更强,未来更换 JDK 版本只需要改
JAVA_HOME - 更符合工程规范
- 多数工具链文档都以
%JAVA_HOME%为标准写法
六、CLASSPATH 是否需要配置
1. CLASSPATH 的历史背景
在早期 Java 版本(尤其是 JDK 1.4、1.5、1.6 时代),很多教程会要求配置:
CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
原因是当时 Java 编译器、运行时依赖一些 jar 包,需要通过 CLASSPATH 让 JVM 找到这些类库。
2. JDK 21 是否需要 CLASSPATH
在 JDK 9 之后,Java 引入了模块化(JPMS),JDK 内部结构发生了较大变化,传统的:
dt.jartools.jar
在 JDK 21 中已经不存在。
同时,在现代开发环境中:
- Maven 会管理 classpath
- Gradle 会管理 classpath
- IDEA 会自动配置项目依赖
- Spring Boot 运行时会自动组织依赖路径
因此,JDK 21 环境下,手动配置 CLASSPATH 不仅没有必要,反而可能引入错误,造成编译、运行路径冲突。
3. 结论
在 JDK 21 的手动安装中,CLASSPATH 不建议配置。
保持为空是最合理的选择。
七、环境变量配置的最终推荐清单
在本次安装中,需要配置的环境变量如下。
1. JAVA_HOME(系统变量)
JAVA_HOME = D:\environment\JDK\jdk-21.0.10
2. Path(系统变量)
在 Path 中新增:
%JAVA_HOME%\bin
3. CLASSPATH(不配置)
JDK 21 不需要配置 CLASSPATH,保持未配置即可。
八、配置完成后的验证方法
环境变量配置完成后,必须重新打开命令行窗口,因为环境变量只会在新启动的进程中生效。
随后执行以下命令验证。
1. 检查 Java 运行时版本
执行:
bash
java -version
正常情况下会输出类似信息:
text
java version "21.0.10" 2025-xx-xx LTS
Java(TM) SE Runtime Environment ...
Java HotSpot(TM) 64-Bit Server VM ...
重点在于版本号必须匹配 21.0.10。
2. 检查 Java 编译器版本
执行:
bash
javac -version
正常输出类似:
text
javac 21.0.10
如果 java 能执行但 javac 不能执行,通常说明 Path 配置有误,或者指向的是 JRE 而非 JDK。
3. 检查 JAVA_HOME 是否生效
执行:
bash
echo %JAVA_HOME%
如果输出:
D:\environment\JDK\jdk-21.0.10
则说明 JAVA_HOME 已正确生效。
4. 检查系统实际调用的 java 路径
执行:
bash
where java
正常情况下应返回:
D:\environment\JDK\jdk-21.0.10\bin\java.exe
如果返回多个路径,说明系统中存在多个 Java 版本,且 Path 中可能存在重复或旧版本残留。
九、常见问题与排查思路
1. 配置完仍然提示 "java 不是内部或外部命令"
通常原因是:
- Path 没有加入
%JAVA_HOME%\bin - 环境变量修改后没有重新打开 CMD
- Path 写错,例如多了空格、路径不完整
JAVA_HOME指向了错误目录
处理方式:
- 重新检查 Path 是否包含
%JAVA_HOME%\bin - 关闭并重新打开命令行窗口
- 用
echo %JAVA_HOME%验证变量是否生效
2. java 版本不是 JDK 21,而是旧版本
通常是系统里曾安装过旧版 Java,并且旧版本路径排在 Path 更靠前的位置。
排查方式:
-
执行
where java查看实际调用路径 -
检查 Path 中是否存在旧 Java 路径,例如:
C:\Program Files\Java\jdk1.8.0_xxx\bin
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
尤其是:
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
这是 Oracle Java 安装器常见的自动注入路径,容易覆盖手动配置的版本。
解决方式:
- 删除旧版本路径
- 确保
%JAVA_HOME%\bin排在 Path 的更前面
3. IDEA 能运行但 CMD 里不行
这种情况通常是:
- IDEA 使用的是内部配置的 JDK
- 系统环境变量没有生效或配置不正确
解决方式依旧是检查 Path 和 JAVA_HOME。
十、总结
在 Windows 上手动安装 JDK 21,真正必须配置的环境变量只有两项:
JAVA_HOME:指向 JDK 根目录Path:加入%JAVA_HOME%\bin
而 CLASSPATH 在 JDK 21 环境中不再需要配置,强行配置反而可能带来兼容性问题。
最终配置如下:
JAVA_HOME = D:\environment\JDK\jdk-21.0.10Path += %JAVA_HOME%\bin
配置完成后,通过 java -version、javac -version、where java 可以快速验证是否安装成功。
这套配置也是目前最通用、最标准、最符合工程实践的 JDK 环境配置方式。