news 2026/9/19 10:10:09

2025年JDK 11安装教程:环境变量配置与多版本切换全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025年JDK 11安装教程:环境变量配置与多版本切换全指南

1. 为什么 2025 年了还要认真对待 JDK 11 的安装

很多人看到"JDK 11 安装教程"这几个字,第一反应是:这有什么好讲的,下一步下一步不就完了?我一开始也这么想,直到帮同事处理一个"明明装了 JDK 却提示找不到 java 命令"的问题,折腾了快一个小时才发现,问题根本不在安装本身,而在环境变量里一个不起眼的顺序问题。从那之后我就意识到,JDK 安装这件事,真正难的不是"装",而是"装完之后能不能被系统正确识别"。

JDK 11 是 Java 发展史上一个非常特殊的存在。它是继 JDK 8 之后第一个长期支持版本(LTS),官方支持周期一直延续到 2026 年甚至更久,所以即便到了 2025 年,大量企业级项目、中间件、构建工具仍然把 JDK 11 作为默认运行环境。你可能已经注意到,身边不少团队一边在用 JDK 17 写新项目,一边还得在本地留一个 JDK 11 来跑老系统,这种"多版本共存"的场景,恰恰是安装环节最容易出问题的地方。

这篇内容我打算讲得实在一点。不是把官网的安装向导复述一遍,而是把下载渠道怎么选、安装路径怎么定、环境变量为什么这么配、配完怎么验证、多版本怎么切换、常见报错怎么排查这几件事一次说透。适合刚接触 Java 的新手,也适合那些装过好几次但每次都要重新查教程的老手。核心关键词就几个:JDK、Java11、安装教程、环境变量,围绕它们展开,不跑题。

先说一个我自己的判断:安装 JDK 这件事,90% 的失败都发生在"环境变量"这一步,而不是安装包本身。所以后面我会把环境变量单独拎出来讲透,包括 Windows、macOS、Linux 三个平台,以及为什么很多人配了JAVA_HOME却依然报错。

2. 下载 JDK 11 之前,先把版本和渠道想清楚

2.1 Oracle JDK 还是 OpenJDK,别选错了

这是第一个岔路口。很多人直接搜"jdk下载",点进第一个结果就下,结果下到的是 Oracle JDK,用着用着发现商用授权有讲究,又得重新换。我的建议是:个人学习、内部测试,用 OpenJDK 发行版完全够用,而且没有授权顾虑

目前主流的 JDK 11 发行版有这么几个,我列个表对比一下,方便你按需选:

发行版维护方特点适合场景
Oracle JDKOracle官方原版,商用需注意授权需要官方支持的商业项目
Eclipse TemurinEclipse 基金会社区维护,免费,兼容性好绝大多数开发场景首选
Amazon Corretto亚马逊免费,长期免费更新云上部署、AWS 生态
Azul ZuluAzul免费,支持多平台跨平台开发
阿里 Dragonwell阿里巴巴国内优化,中文文档友好国内项目、网络下载快

我个人的习惯是:本地开发用 Temurin,国内服务器部署用 Dragonwell。原因很简单,Temurin 的兼容性经过大量项目验证,Dragonwell 在国内下载速度快、文档是中文的,遇到问题好查。

2.2 下载渠道:官网和镜像怎么选

官网下载当然最稳妥,但国内访问 Oracle 官网经常慢得让人抓狂,有时候点下载按钮半天没反应。这时候镜像站就派上用场了。国内常用的镜像有清华 TUNA、华为云、阿里云等,搜索"jdk镜像下载"基本都能找到。

提示:从镜像站下载时,一定要核对文件的 SHA256 校验值,确保文件完整没被篡改。官网一般会提供校验值,下载完用命令比对一下,几秒钟的事,能避免很多莫名其妙的安装失败。

具体操作上,以 Temurin 为例,进入官网后选择 Version 11、Operating System(Windows/macOS/Linux)、Architecture(x64/ARM64),然后下载对应的安装包。Windows 一般下.msi.zip,macOS 下.pkg.tar.gz,Linux 下.tar.gz

这里有个细节:Windows 用户优先选.msi安装包,而不是.zip.msi会自动帮你配好一部分环境变量,.zip是纯解压版,所有配置都得手动来。新手用.msi能少踩不少坑。

2.3 安装路径:别放在带空格和中文的目录

这是很多人忽略的一点。安装路径里如果有空格或者中文,某些老旧的构建工具、脚本会解析出错。我见过最典型的就是路径写成C:\Program Files\Java\jdk-11,结果某个脚本把空格当成了参数分隔符,直接报错。

我的建议是统一放在一个干净、简短、全英文的路径下,比如:

  • Windows:C:\dev\jdk-11
  • macOS:/Library/Java/JavaVirtualMachines/jdk-11.jdk
  • Linux:/usr/local/jdk-11

这样后面配环境变量的时候,路径写起来也清爽,不容易出错。

3. Windows 平台安装与环境变量配置全流程

3.1 安装步骤:从双击到完成

如果你下的是.msi包,双击之后基本就是一路 Next,但有两个地方要停一下:

第一,安装路径。默认路径通常是C:\Program Files\Eclipse Adoptium\jdk-11.0.x,我建议改成C:\dev\jdk-11,理由上面说了,避免空格。

第二,是否安装公共 JRE。JDK 11 之后其实已经不再单独提供 JRE 了,安装向导里如果出现这个选项,直接跳过就行,JDK 本身就包含了运行环境。

安装完成后,打开命令行输入java -version,如果能看到版本号,说明安装本身没问题。但注意,这时候能看到版本号,不代表环境变量配好了,因为.msi可能只是把 java 加进了系统路径,JAVA_HOME还是空的,而很多工具(比如 Maven、Gradle)恰恰依赖JAVA_HOME

3.2 JAVA_HOME 和 Path 到底谁管什么

这是环境变量配置里最核心的问题,我见过太多人把这两个搞混。

简单说:

  • JAVA_HOME:指向 JDK 的安装根目录,比如C:\dev\jdk-11。它本身不直接让系统找到 java 命令,但它是给其他工具看的"路标"。Maven、Gradle、Tomcat 这些工具启动时会去读JAVA_HOME,然后从里面找 java。
  • Path:系统查找可执行文件的路径列表。只有把%JAVA_HOME%\bin加进Path,你在任意目录敲java才能被找到。

所以正确的做法是:先配JAVA_HOME,再把%JAVA_HOME%\bin加到Path。顺序反了也能用,但逻辑上不清晰,后面维护容易乱。

具体操作:

  1. 右键"此电脑" → 属性 → 高级系统设置 → 环境变量
  2. 在"系统变量"里点"新建",变量名填JAVA_HOME,变量值填C:\dev\jdk-11
  3. 找到"系统变量"里的Path,双击编辑,点"新建",填入%JAVA_HOME%\bin
  4. 一路确定保存

注意:Path里一定要用%JAVA_HOME%\bin这种引用形式,而不是写死C:\dev\jdk-11\bin。这样以后换 JDK 版本,只要改JAVA_HOME一个地方,Path不用动,省事还不容易出错。

3.3 验证配置:三步确认法

配完之后别急着关窗口,按这三步验证:

第一步,关掉所有已打开的命令行窗口,重新开一个。环境变量是启动时加载的,老窗口不会自动刷新,这是新手最常犯的错。

第二步,依次执行:

echo %JAVA_HOME% java -version javac -version

echo %JAVA_HOME%应该输出你的 JDK 路径;java -versionjavac -version都应该输出版本号,而且两者版本要一致。如果java有版本但javac报"不是内部或外部命令",说明Path没配对,或者配到了 JRE 而不是 JDK。

第三步,检查Path里有没有多个 java 路径。有时候系统里装了多个 JDK,Path里排在前面的那个会生效。如果版本不对,去Path里把想要的版本往上挪。

3.4 多版本共存:怎么在 JDK 8、11、17 之间切换

这是 2025 年非常现实的场景。我的做法是:

  • 每个版本装到独立目录,比如C:\dev\jdk-8C:\dev\jdk-11C:\dev\jdk-17
  • JAVA_HOME只指向当前要用的那个
  • 需要切换时,改JAVA_HOME的值,重开命令行

如果嫌手动改麻烦,可以写两个批处理脚本,一个切到 11,一个切到 17,双击就切换。脚本内容大概是这样:

@echo off setx JAVA_HOME "C:\dev\jdk-11" /M echo 已切换到 JDK 11,请重开命令行窗口 pause

setx是永久设置环境变量的命令,/M表示系统级。注意执行完必须重开命令行才生效。

4. macOS 与 Linux 下的 JDK 11 配置差异

4.1 macOS:用 pkg 还是手动解压

macOS 上装 JDK 11 有两条路。一条是下.pkg双击安装,它会自动装到/Library/Java/JavaVirtualMachines/下,系统自带的/usr/libexec/java_home工具能识别到。另一条是下.tar.gz手动解压,适合需要精确控制路径的场景。

.pkg装完之后,验证命令是:

/usr/libexec/java_home -V

这个命令会列出系统里所有已安装的 JDK,非常方便。切换版本可以用:

export JAVA_HOME=$(/usr/libexec/java_home -v 11)

这行的意思是让系统自动找到 11 版本的路径并赋给JAVA_HOME,比手写路径靠谱。

如果要永久生效,把这行加到~/.zshrc(macOS 现在默认是 zsh)或者~/.bash_profile里,然后source一下。

4.2 Linux:tar.gz 解压 + profile 配置

Linux 上最常见的是下.tar.gz手动解压。步骤是:

tar -zxvf jdk-11.0.x_linux-x64_bin.tar.gz -C /usr/local/ mv /usr/local/jdk-11.0.x /usr/local/jdk-11

然后编辑/etc/profile,在末尾加上:

export JAVA_HOME=/usr/local/jdk-11 export PATH=$JAVA_HOME/bin:$PATH

保存后执行source /etc/profile让它生效。这里有个细节:$JAVA_HOME/bin要放在$PATH前面,这样新配的 JDK 优先级更高,不会被系统自带的旧版本覆盖。

提示:如果source之后java -version还是旧版本,用which java看看实际调用的是哪个路径。很多时候是/usr/bin/java这个软链接指向了旧版本,需要手动更新软链接或者调整PATH顺序。

4.3 三个平台配置对比

为了让你一眼看清差异,我整理了个对照表:

项目WindowsmacOSLinux
配置文件系统环境变量面板~/.zshrc/etc/profile
生效命令重开命令行source ~/.zshrcsource /etc/profile
版本切换改 JAVA_HOMEjava_home -v改 JAVA_HOME
常见坑Path 顺序shell 类型软链接指向

这张表建议存下来,换平台的时候对照着看,能省不少查资料的时间。

5. 环境变量配置失败的那些坑,我一个个踩过

5.1 "不是内部或外部命令"的三种可能

这个报错太经典了,我总结下来无非三种原因:

第一种,Path没配或者配错。检查Path里有没有%JAVA_HOME%\bin,注意是bin目录,不是 JDK 根目录。很多人只配了JAVA_HOME忘了配Path,结果就是echo %JAVA_HOME%有输出,但java命令找不到。

第二种,配了但没生效。环境变量改完必须重开命令行,老窗口读的还是旧配置。这个坑我踩过不止一次,明明配对了却一直报错,最后发现是窗口没关。

第三种,路径里有空格或中文。前面提过,Program Files里的空格会让某些解析出问题。解决办法就是换到无空格路径。

5.2 JAVA_HOME 配了却依然报错

这种情况通常是工具读的不是你配的那个JAVA_HOME。比如你在用户变量里配了,但工具读的是系统变量;或者你配了系统变量,但当前 shell 里有个临时变量覆盖了它。

排查方法:在命令行里执行echo %JAVA_HOME%(Windows)或echo $JAVA_HOME(macOS/Linux),看看输出是不是你期望的路径。如果不是,说明有更高优先级的变量在起作用。

还有一种情况是路径末尾多了个反斜杠或空格。比如C:\dev\jdk-11\末尾带斜杠,某些工具拼接路径时会变成C:\dev\jdk-11\\bin,虽然多数情况能容错,但个别工具会报错。养成不加末尾斜杠的习惯。

5.3 版本冲突:系统里装了多个 JDK 怎么办

Windows 上可以用where java命令列出所有 java 可执行文件的路径,按Path顺序排列,排第一的就是当前生效的。macOS/Linux 用which -a java

如果发现生效的不是想要的版本,就去调整Path顺序,或者直接改JAVA_HOME。我一般建议只保留一个 JDK 在Path,其他版本通过切换JAVA_HOME来用,这样最不容易乱。

5.4 一个容易被忽略的点:IDE 里的 JDK 设置

很多人系统环境变量配好了,命令行也验证通过了,但打开 IDEA 或 Eclipse 新建项目还是报错。这是因为IDE 有自己的 JDK 配置,不一定读系统环境变量

以 IDEA 为例,需要在File → Project Structure → SDKs里手动添加 JDK 路径,然后在Project里选择对应的 SDK。这一步不做,IDE 用的可能还是它自带的或者之前配的旧版本。

提示:IDE 里配 JDK 时,指向的应该是 JDK 根目录,不是bin目录。这点和JAVA_HOME一致,别搞混。

6. 装完之后,怎么确认这套环境真的能用

6.1 写个最小程序跑一遍

光看版本号还不够,最好实际编译运行一个程序。新建一个Hello.java

public class Hello { public static void main(String[] args) { System.out.println("JDK 11 环境正常,版本:" + System.getProperty("java.version")); } }

然后:

javac Hello.java java Hello

如果输出里带着 11 的版本号,说明编译和运行链路都通了。这一步能同时验证javacjava两个命令,比单看版本号更靠谱。

6.2 检查 JAVA_HOME 是否被工具正确识别

如果你用 Maven,可以执行mvn -version,输出里会显示它使用的 Java 版本和JAVA_HOME路径。如果这里显示的版本不对,说明 Maven 读到的JAVA_HOME有问题,回头检查环境变量。

Gradle 类似,gradle -version也会显示 JVM 信息。这一步是验证"工具链是否打通"的关键,很多人命令行能跑但构建工具报错,问题就出在这。

6.3 常见验证命令速查

命令作用期望结果
java -version查看运行时版本显示 11.x
javac -version查看编译器版本显示 11.x
echo %JAVA_HOME%查看变量值显示 JDK 路径
where java列出 java 路径第一行为目标 JDK
mvn -version查看 Maven 用的 JDK显示 11.x

这张表可以当成装完后的自检清单,逐条过一遍,基本就不会有遗漏。

7. 我这些年攒下的几个实操心得

第一个心得:装 JDK 之前先想清楚要用哪个版本,别装完再纠结。2025 年新项目建议直接上 JDK 17 或 21,但如果你要维护老系统,JDK 11 是绕不开的。提前规划好,能避免反复卸载重装。

第二个心得:环境变量配置尽量用引用而不是写死路径%JAVA_HOME%\bin这种写法,换版本时只改一处,维护成本低。写死路径的话,每次换版本都要改好几处,容易漏。

第三个心得:遇到问题先看echo输出,再怀疑其他。环境变量的问题,90% 通过echo %JAVA_HOME%where java就能定位。别一上来就重装,先看变量对不对。

第四个心得:多版本共存时,给每个版本写个切换脚本。Windows 用.bat,macOS/Linux 用.sh,双击或一行命令就能切,比手动改环境变量快得多,也不容易改错。

第五个心得:IDE 的 JDK 配置和系统环境变量是两回事。系统配好了不代表 IDE 配好了,新建项目前先在 IDE 里确认 SDK 设置,能省掉很多"明明配了却报错"的困惑。

最后再补一句,JDK 安装这件事,看起来简单,但真正把它配得干净、可维护、多版本友好,是需要一点经验的。上面这些内容都是我在实际项目里一点点试出来的,希望能帮你少走点弯路。如果你在配置过程中遇到什么奇怪的现象,大概率能在前面几个章节里找到对应的排查思路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 10:09:27

ADS 2023工作台搭建指南:从安装校准到Doherty功放闭环仿真

1. 项目概述:ADS 2023不是“点下一步就能用”的软件,而是一套需要亲手调校的射频设计工作台Advanced Design System 2023(简称ADS 2023)不是你装完就能直接画出功放版图、跑出Doherty放大器S参数的那种“开箱即用”工具。它更像一…

作者头像 李华
网站建设 2026/9/19 10:09:13

小额贷款业务流程拆解:数字化系统设计与贷后核算实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 10:08:59

EMC整改三法器:电容、电感、磁珠的物理行为与协同设计

1. 项目概述:EMC整改不是玄学,是电路医生的三把手术刀“EMC整改的三法器:电容器/电感/磁珠”——这个标题一出来,我就知道,又一位硬件工程师刚被测试室的报告砸懵了。上周我帮一家做工业PLC模块的客户做整改&#xff0…

作者头像 李华
网站建设 2026/9/19 10:08:57

奥的斯电梯主板IO点表解析:从符号地址到结构化数据与自控集成

简介:这份奥的斯电梯主板参数资料面向电梯维保人员、控制系统调试工程师及电梯相关专业学习者,用于快速查阅主板各输入输出端口的定义与功能。内容围绕电梯控制系统的核心逻辑展开,涵盖开门极限、开关门按钮、电子门保护、负荷称重、独立服务…

作者头像 李华
网站建设 2026/9/19 10:07:40

打造命令行工具的GUI封装:BrewUI的进程管理与输出解析实践

老实说,第一次决定把brew list的输出按空格切分来渲染软件列表时,我低估了这个项目真正的难度。那会儿我的想法很简单:Homebrew 作为 macOS 上最常用的包管理器,功能强大但终端界面劝退了不少人,做一个叫BrewUI的图形面…

作者头像 李华
网站建设 2026/9/19 10:07:28

Muse Spark 1.3 在榜单第四,TaoToken 管住生成页面的 Token

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华