ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

从解压到环境变量:Windows x64安装配置JDK 11实战

从解压到环境变量:Windows x64安装配置JDK 11实战 简介本资源为Oracle官方发布的JDK 11.0.12长期支持LTS正式版安装包专为Windows 64位系统设计面向Java初学者、企业开发人员及教学实训场景解决Java环境搭建、编译调试与生产级应用部署的核心需求。压缩包共424个文件包含72个license与copyright文件保障合规使用、83个DLL动态库支撑JVM底层运行、40个EXE可执行工具如javac、java、javadoc等核心命令、72个JMOD模块文件支撑Java 9模块化系统以及关键配置文件如jvm.cfg、cacerts、classlist等完整复现官网二进制分发结构总大小154.12MB。已有2352人学习下载资源附带info.txt说明文档清晰指引安装路径、环境变量配置及版本特性概览。用户解压即用可直接构建标准Java开发环境支持HTTP Client API、ZGC实验性垃圾收集器、模块化打包等JDK 11核心特性实践是稳定、安全、可追溯的生产就绪型基础开发套件。 做 Java 开发的应该都接过这种活儿新配一台 Windows 电脑或者帮同事搭一套开发环境第一件事就是装 JDK 11。JAVA_HOME 写错一个字母比业务代码出 bug 还让人抓狂。我最近帮团队整理一份安装流程用的是 jdk-11.0.12 windows-x64_bin.rar 这个官方压缩包从解压到环境变量再到实际跑通一个 Spring Boot 项目全程记录了一遍。这篇文章就把完整过程拆开讲顺手把文档里从来不写的坑也一并填了。如果你正在下载 JDK 11准备在 Windows x64 上配置开发环境或者已经拿到这个包但不确定装完怎么验证这篇内容应该能帮你省下不少时间。不涉及高深理论全是实际操作新手照做就能跑通老手也可以看看有没有遗漏的细节。1. 为什么是 JDK 11版本选型里的那些门道1.1 JDK 11 在版本演进中的定位从 Java 8 开始Oracle 把版本发布节奏从之前的三四年一个大版本改成了半年一个版本。这个变化让很多团队措手不及半年就升一次级对生产环境来说成本太高。所以 Oracle 同时引入了 LTSLong-Term Support机制每六个版本中挑一个作为长期支持版普通版本只维护到下一个版本发布LTS 版本则会持续更新很多年。JDK 8 是第一个 LTSJDK 11 是第二个 LTS之后是 JDK 17。理解了这条时间线就能明白为什么到现在还有大量公司在用 JDK 8 和 JDK 11不是因为保守而是因为这两个版本的维护周期足够长产线升级一次的成本和风险都摆在那里。对个人学习和日常开发来说JDK 11 依然是绕不开的版本特别是跑 Spring Boot 2.x、Kafka、Elasticsearch 这类主流中间件它们对 JDK 11 的支持已经非常成熟。jdk-11.0.12 是 2021 年 7 月发布的补丁版本归属于 JDK 11 生命周期里比较靠后的关键更新修复了一批安全漏洞和稳定性问题。和最初的 11.0.0 相比这个版本的成熟度要高很多。如果你手头正好是这一版说明基础选型是对的。1.2 官方正式版与社区发行版的差异JDK 的发行版很多Oracle JDK、OpenJDK、Adoptium、Amazon Corretto、Azul Zulu简直挑花眼。标题里专门强调“官网正式版”我就说说为什么这个选择值得坚持。Oracle JDK 的测试流程是最严格的一档官方宣称在成千上万种系统配置下跑完整测试套件。它的安全公告也最清晰某个版本修复了哪些 CVE 漏洞、影响范围是什么都能在官方文档里逐条查到。对很多企业内部环境来说IT 安全审核会要求使用官方分发渠道的二进制文件这一点在实际工作里非常重要。很多社区版其实也不错比如 Adoptium 的构建在开发者群体里口碑很好。但如果你在公司里用Oracle JDK 的兼容性和支持路径最标准。另外需要注意从 JDK 11 开始Oracle 不再提供独立的 JRE 安装包。很多人还惯性去搜“JRE 11”搜到的往往也是旧版本或第三方打包。老老实实用完整 JDK 就好它本身就包含运行能力。2. 安装前准备环境检查与安装包选择2.1 先确认你的系统是不是 x64标题里写了 windows-x64那第一步就是确认系统确实是 x64 架构。Windows 10 和 Windows 11 上右键“此电脑”选“属性”在“系统类型”一栏能看到“64 位操作系统”或“32 位操作系统”。x64 的安装包不能在 32 位系统上运行反过来也一样。其实 Oracle 从某个版本开始就不再提供 32 位 Windows 的 JDK如果系统还是 32 位的需要考虑的可能不是装哪个 JDK而是系统本身该换了。更准确的确认方式是在命令行执行echo %PROCESSOR_ARCHITECTURE%输出 AMD64 就是 64 位系统。很多人看到 AMD64 以为是 AMD 处理器专属其实不是。这是 x64 架构的标准名称Intel 的 64 位处理器同样显示 AMD64因为 x64 指令集最早是 AMD 提出的后来成为行业标准。2.2 .rar、.zip、.exe三种安装包格式怎么选这个安装包是 .rar 格式。Oracle 官网现在一般提供 .zip 和 .exe.rar 大多是网上流传的整理版。不过内容基本都是官方原始文件只是用 WinRAR 重新打包方便体积更小、分享更快。三种格式的区别值得搞清楚格式是否需要解压是否自动配置适用场景.exe不需要运行向导可自动配置快速安装适合个人电脑.zip需要解压不自动手动配置开发者常用灵活可控.rar需要解压需装 WinRAR 或 7-Zip不自动手动配置网络流传版本常见格式我的建议是优先选 .zip 或 .rar 这种解压即用的版本。原因有两个一是安装路径完全可控可以放在 D 盘而不是 C 盘方便统一管理二是卸载时直接删文件夹就行不用跑卸载程序也不会有注册表残留。.exe 向导版虽然方便但会在系统里注册一堆东西出问题时清理起来很麻烦。2.3 正式动手前先完成这两件事第一件事检查系统里有没有装过其他 Java 版本。命令行输入java -version如果有输出说明之前装过。此时不要急着卸载旧的因为系统里可能有别的软件依赖老版本。先走“多版本共存 环境变量切换”的路子后面第五节会详细说。第二件事关闭杀毒软件或者把解压目录加白名单。Windows Defender 偶尔会把下载的压缩包里的 java.exe、javaw.exe 误报为可疑程序。这不是 JDK 有问题而是 Java 程序的一些行为特征容易被安全软件盯上。我踩过一次解压完所有文件都被隔离java -version 一直提示找不到命令折腾了大半天才查到是杀软干的。3. 从压缩包到开发环境完整安装流程3.1 解压与目录规划的几个细节拿到 jdk-11.0.12 windows-x64_bin.rar 之后建议放到一个专门的目录比如 D:\Java\然后解压。解压完成会得到一个名为 jdk-11.0.12 的文件夹全路径类似 D:\Java\jdk-11.0.12。有几个细节是经验之谈路径里不要有中文也不要带空格。虽然很多工具对中文路径的兼容性变好了但仍有不少构建脚本、持续集成工具会在中文路径下出问题。别拿“我本地没问题”去赌团队协作和服务器部署时这些坑早晚会炸。建议建一个 D:\Java 总目录以后配 JDK 8、JDK 17 都往里面放每个版本一个子目录找起来清楚做版本切换也方便。解压时注意 WinRAR 版本别太老太老的版本对 rar5 格式支持不好会解压报错。解压完打开文件夹确认里面有 bin、conf、include、jmods、legal、lib 等子目录。bin 目录下应该有 java.exe、javac.exe 这些核心可执行文件。看到它们说明解压成功了。还有一个关键点JDK 11 的目录结构和 JDK 8 相比有明显区别不再有 jre 子目录。JDK 8 安装目录下有个独立的 jre 文件夹而 JDK 11 整个目录就是完整运行时环境bin 下的 java.exe 直接运行程序。很多人第一次切到 JDK 11 会问“JRE 去哪了”答案就是JDK 本身就是运行时。3.2 JAVA_HOME、Path 与 CLASSPATH 的正确配置方式环境变量配置是整个安装过程最容易翻车的地方。按下面步骤来基本没有意外。打开环境变量设置界面两种方式任选右键“此电脑” - 属性 - 高级系统设置 - 环境变量按 Win R输入 sysdm.cpl进入“高级”-“环境变量”在“系统变量”区域点击“新建”创建 JAVA_HOME变量名JAVA_HOME 变量值D:\Java\jdk-11.0.12然后找到 Path 变量点编辑在最前面新建一行输入 %JAVA_HOME%\bin。Win10/Win11 的 Path 编辑器是一行一个条目直接新建即可。为什么要放在最前面因为命令行执行 java 时会按 Path 里的目录顺序逐个查找。如果系统里之前装过其他 Java它的路径排在前面java -version 出来的就是旧版本。把 %JAVA_HOME%\bin 放在第一位保证优先用我们配的 JDK 11。关于 CLASSPATH我必须多说一句。很多老教程会教你新建 CLASSPATH 变量内容类似 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar然后反复强调不配跑不起来。明确告诉你JDK 5 之后、尤其 JDK 11 时代完全不需要手动配置 CLASSPATH。JVM 默认包含当前目录和核心类库手动配置反而容易引起奇怪的问题。看到让人配 CLASSPATH 的教程基本可以判断那是十多年前的内容直接跳过。注意配置完环境变量必须关闭所有命令行窗口再重新打开。环境变量只在进程启动时读取一次已经在运行的窗口不会感知新配置。这是“配完不生效”的第一大原因。3.3 验证安装三个命令看穿一切配置完别急着打开 IDE先用命令行验证。新开 cmd 窗口依次执行java -version javac -version echo %JAVA_HOME%正常情况下java -version 输出类似java version 11.0.12 2021-07-20 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.128-LTS-...) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.128-LTS-..., mixed mode)javac -version 输出javac 11.0.12echo %JAVA_HOME% 输出 D:\Java\jdk-11.0.12。三条都正常就说明 JDK 装好了。如果 java -version 有输出但版本不对多半是 Path 里其他 Java 路径排在前面提示“不是内部或外部命令”说明 %JAVA_HOME%\bin 没生效检查 JAVA_HOME 是否写错、命令行是否重开。到这里环境已经可以用了。顺手写个测试文件确认编译功能public class HelloJdk11 { public static void main(String[] args) { System.out.println(JDK 11 works!); } }保存为 HelloJdk11.java在文件所在目录执行javac HelloJdk11.java java HelloJdk11输出 JDK 11 works! 说明整个链路完全跑通。接下来可以放心去折腾 Spring Boot、Maven 项目了。4. JDK 11 到底带来了什么新特性与迁移注意点4.1 var、单文件运行日常开发最明显的两个变化JDK 11 日常最容易被感知的就是局部变量类型推断var 关键字。以前写集合是这样MapString, ListString map new HashMapString, ListString();现在可以写成var map new HashMapString, ListString();var 要求必须从初始化表达式推断类型所以不能先声明后赋值。在 for 循环、Lambda 参数、Stream 操作里使用很舒服。但我的个人建议是在链路长的业务方法里克制使用。var 让局部变量类型变“隐性”读代码的人要自己推测反而增加理解成本。右边的 new 表达式一目了然的地方可以放心用其他场景宁肯写清楚类型。另一个实用特性是单文件源码运行。JDK 11 可以直接运行单文件源码不需要先 javac 编译。比如 HelloJdk11.java直接java HelloJdk11.java就能输出结果。写一些临时小工具、测试脚本时非常方便。以前要跑一个 Java 片段得建项目、建类、写 main、编译现在一行命令完事。不过这种方式只适用于单文件程序涉及第三方库依赖还是得用构建工具。4.2 从 JDK 8 升到 JDK 11 的常见坑如果你之前一直用 JDK 8切到 JDK 11 后最常见的坑是包名找不到。JDK 9 模块化之后JDK 11 把 Java EE 和 CORBA 相关模块移除了包括 javax.xml.bindJAXB、javax.annotation、javax.jws 里的 API。项目代码里如果 import 了这些包编译会直接报错。这是预期行为不是 JDK 装错。解决办法是在 pom.xml 里显式加依赖dependency groupIdjavax.xml.bind/groupId artifactIdjaxb-api/artifactId version2.3.1/version /dependencySpring Boot 项目的话2.1 开始官方支持 JDK 11。如果还在用 Spring Boot 1.x别想能在 JDK 11 上顺利跑先把框架版本升上去。还有 Lombok、MapStruct 这些编译期注解处理器老版本在 JDK 11 下经常编译失败。我当年从 JDK 8 跳到 11项目里用了旧版 Lombok一编译就是一大堆“程序包 lombok 不存在”折腾了一上午发现只是 Lombok 版本太旧。另外JDK 11 对 TLS 1.3 的支持是默认开启的如果对接的老系统仍然只支持 TLS 1.2 以下可能需要显式调整协议配置。这个问题在做接口联调时会遇到提前知道能省不少排查时间。5. 开发工具链集成与多版本共存5.1 IDE 和 Maven/Gradle 怎么正确识别 JDK 11命令行验证通过只是第一步。IDE 不认 JDK 11照样跑不了项目。IntelliJ IDEA 里打开 File - Project Structure - SDKs确认有没有 JDK 11 的条目没有就点“Add JDK”选到 D:\Java\jdk-11.0.12。Project 设置里的 SDK 和 Language Level 也要同步调成 11。Eclipse 用户需要注意较老版本的 Eclipse 对 JDK 11 支持不完善建议 Eclipse 2019-03 以上版本。在 Window - Preferences - Java - Installed JREs 里添加 JDK 目录然后在项目的 Java Compiler 里把 Compliance Level 调到 11。Maven 用户要检查两点一是 maven-compiler-plugin 的 source/target 版本是否设置为 11二是 Maven 自身运行的 JDK。如果 Maven 运行时用的是旧 JDK构建出来的 class 文件版本可能不对。可以执行mvn -version看输出里 Java version 是否为 11.0.12。不是的话检查 Maven 的 JAVA_HOME 环境变量是否指向了正确的 JDK。Gradle 同理确认 gradle -version 的 JVM 版本。5.2 多版本共存时的切换方案实际开发中经常要同时面对 JDK 8 和 JDK 11。老项目跑 JDK 8新项目切 JDK 11环境变量来回改很麻烦。我推荐一个简单方案只维护一个 JAVA_HOME指向当前默认版本要切换时手动改 JAVA_HOME 的值然后重新开命令行。具体说就是所有 JDK 版本都放在 D:\Java 下面D:\Java\jdk1.8.0_202D:\Java\jdk-11.0.12D:\Java\jdk-17配置环境变量时先把 JAVA_HOME 指到 JDK 11。需要切 JDK 8 时把 JAVA_HOME 改成 D:\Java\jdk1.8.0_202重开命令行就生效。IDEA 里每个项目单独指定 SDK不受系统 JAVA_HOME 影响所以大多数时候系统层只是个默认值。有几个注意事项不要同时配置用户变量和系统变量的 JAVA_HOME会互相干扰只配系统变量切换后一定要重开命令行否则老进程仍然读旧值Maven、Gradle、Tomcat 等工具如果以服务方式运行需要重启服务才能感知新配置。5.3 Windows 下的 JDK 版本切换小脚本手动改环境变量还是有点烦可以写个批处理脚本一键切换。思路简单管理员权限下用 setx 命令修改系统环境变量然后提示重开窗口。脚本内容如下echo off echo Please input JDK version: 8/11/17 set /p ver? if %ver%11 ( setx JAVA_HOME D:\Java\jdk-11.0.12 /M echo JAVA_HOME switched to JDK 11 ) else if %ver%8 ( setx JAVA_HOME D:\Java\jdk1.8.0_202 /M echo JAVA_HOME switched to JDK 8 ) else if %ver%17 ( setx JAVA_HOME D:\Java\jdk-17 /M echo JAVA_HOME switched to JDK 17 ) else ( echo Invalid input ) pause保存为 switch_jdk.bat右键以管理员身份运行。注意 setx /M 修改的是系统环境变量需要管理员权限脚本里的 JDK 路径改成你自己机器上的实际路径文件编码如果是中文建议用 ANSI 编码保存否则中文提示会乱码。这个方案不是最优雅的但胜在零依赖、不需要安装额外工具绝大多数场景够用了。如果团队里有多个开发者更推荐统一装一个版本管理工具或直接标准化 JDK 版本减少各自为政带来的环境差异。6. 常见问题排查与避坑指南6.1 高频问题速查表下面这些是我接触过的大量环境问题里的高频项整理成表方便直接对照现象可能原因解决办法java 不是内部或外部命令Path 没有配置 %JAVA_HOME%\bin检查 Path 配置重开命令行java -version 显示旧版本Path 里其他 Java 路径排在前面把 %JAVA_HOME%\bin 移到最前面Error: opening registry key系统注册表残留旧 JDK 信息清理注册表或改用 zip 版重新配置javac 版本和 java 不一致JAVA_HOME 和 Path 指向不同 JDK确保 JAVA_HOME 的 bin 在 Path 最前方IDE 里项目语言级别还是 8项目配置未更新修改 Project Structure/Project SDK解压提示文件损坏下载不完整或杀软隔离校验哈希重新下载白名单解压编译报找不到 javax.xml.bindJDK 11 移除了 Java EE API手动添加 jaxb-api 等依赖运行 java 报 UnsupportedClassVersionErrorclass 文件编译版本高于当前 JDK用 JDK 11 重新编译或切换更高版本 JDK6.2 两个隐蔽的坑System32 与杀软隔离第一个坑是 C:\Windows\System32 下的 java.exe。很多老软件或安装向导版的 JDK 会在 System32 里塞入 java.exe、javaw.exe、javaws.exe。这个目录在 Path 中的优先级极高导致你配了半天自己的 JDK运行时永远走 System32 里那个旧的。遇到“环境变量已配置但版本不对”的谜之问题去 System32 目录下看看这三个文件是否存在有的话删掉或移走。这是很多同类问题里最容易被忽视的终极解法。第二个坑是杀毒软件隔离。我遇到过一次java -version 正常javac -version 提示找不到后来发现是杀毒软件把 bin 目录下的 javac.exe 隔离了。检查方法是去杀软的隔离区看恢复文件并加白名单。Windows Defender 有时也会干这种事把解压目录加入排除列表能减少很多麻烦。这个操作在 2.3 节就提前打过招呼真遇到的时候不用慌知道原因就好办。6.3 卸载旧版本的正确姿势前面提过如果你准备彻底移除旧版本 JDK卸载方法要分情况。之前用 .exe 安装向导版装的去“设置”-“应用”里找到对应 Java 条目卸载。之前用 zip 解压版的直接删文件夹。但无论哪种都别忘了清理环境变量里指向旧版本的 JAVA_HOME 和 Path 条目。否则会出现“文件已经删了java -version 还有输出”的怪现象很可能就是 Path 残留或者 System32 里的旧文件在捣乱。清理时建议先把所有 Java 相关环境变量截图保存手动删除和旧 JDK 相关的行保留当前要用的 JDK 条目。改完重开终端验证一次。如果用的软件比较多最好再检查一下是否有程序将 JRE 路径写死在注册表里清理注册表时要小心操作建议先导出备份再修改防止误删导致系统问题。最后再分享一点实战体会围绕 jdk-11.0.12 windows-x64_bin.rar 这个包我最近实际搭了一套环境过程中踩过的坑基本都写进去了。如果你也是刚拿到这个包照着第 3 节的流程走一遍正常十分钟以内就能把环境跑起来。比配置更重要的是理解每一步为什么这么做为什么配 JAVA_HOME、为什么 Path 放最前面、为什么不需要 CLASSPATH。这些道理通了以后换 JDK 17 或者新版本思路完全一样只是目录名不同。装环境这种事看似简单但一个干净可控的 JDK 环境能在后续开发里省掉无数个“我本地跑得好好的”式的联调噩梦。祝顺利。本文还有配套的精品资源点击获取
返回列表