ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

JDK 11下载安装详解:windows-x64环境变量配置与踩坑指南

JDK 11下载安装详解:windows-x64环境变量配置与踩坑指南 简介本资源为Oracle官方发布的JDK 11.0.12长期支持LTS正式版Windows 64位安装包专为Java开发者、高校教学及企业级生产环境设计解决Java 11开发环境快速部署、版本合规性与安全更新保障等核心需求。压缩包共424个文件含83个DLL动态库支撑JVM运行、72个LICENSE/COPYRIGHT法律文件确保合规使用、72个JMOD模块文件支撑Java平台模块化系统Jigsaw、40个EXE可执行工具如javac、java、javadoc等、36个Markdown格式说明文档以及关键配置文件如jvm.cfg、cacerts、classlist等全面覆盖编译、调试、运行与安全配置所需组件总大小154.12MB。已有2352人学习下载资源结构完整、目录规范开箱即用无需额外依赖配套info.txt提供清晰安装指引与系统要求适合Java初学者搭建标准开发环境也满足中高级开发者对LTS版本稳定性、HTTP Client API及ZGC早期支持等特性的实践验证需求。 最近给一台新配的Windows x64开发机搭Java环境下载的正是标题里这个包jdk-11.0.12 windows-x64_bin.rar。说实话这个包名我在实际工作里见过很多次也帮同事排查过不少从这里起步的坑。JDK 11是目前生产环境里出现频率相当高的长期支持版本而这篇文章就围绕jdk11下载、jdk11下载安装包的选择、安装和验证把完整流程和踩坑经验一次讲透。不管你是刚转Java想装第一个JDK的新手还是被“java不是内部或外部命令”折腾到崩溃的开发这篇文章都适用。我会从版本背景、下载选型、安装配置、验证对接、常见问题几个维度展开尽量做到看完就能上手。1. JDK 11为什么值得装版本背景与选型思路1.1 JDK 11的LTS地位与生命周期JDK 11是2018年9月发布的长期支持版本也就是大家常说的LTS。按Oracle后来的发布节奏LTS版本每三年出一个JDK 11刚好卡在JDK 8和JDK 17之间。很多老项目从JDK 8升级第一站就是JDK 11因为Spring Boot 2.x、主流中间件、大数据组件对JDK 11的兼容性已经非常成熟而直接跳到JDK 17在某些老框架里又容易遇到模块化权限问题。11.0.12这个版本号是Oracle在2021年7月发布的季度补丁版本属于Java 11系列的PSU。这类补丁版本主要修复安全漏洞、JVM底层缺陷和少量回归问题整体稳定性比初版11.0.0高不少。如果公司规定用JDK 11并且没有指定具体小版本选11.0.12之后的版本基本不会出大问题。我见过不少团队直接拿网上随便下的“绿色版JDK”用版本号五花八门有11.0.2也有11.0.7用起来可能没问题但一旦遇到安全合规审计会很难交代。所以只要是能用官网正式版尽量别用来路不明的包。1.2 11.0.12这个版本包含哪些更新从实际使用角度看11.0.12相比早期小版本最值得关注的是两件事安全补丁和JVM稳定性修复。JDK 11系列从初版到11.0.12更新了几十个安全漏洞涉及TLS、序列化、JNDI等常见攻击面。对于一个要长期跑业务的系统来说这种安全修复比新功能重要得多。另外针对Windows平台的修复也不少。比如某些Windows版本的线程栈处理、文件系统路径解析、字体渲染等问题在11.0.12里都有不同程度的改善。如果你之前用JDK 11早期版本在Windows上遇到过奇怪的原生方法崩溃升级到11.0.12大概率能缓解。JDK 11本身在功能层面的变化也值得一提首个正式包含HttpClient的版本也就是java.net.http包支持用java命令直接运行单个.java源码文件新增ZGC垃圾收集器、Epsilon GC等实验性功能同时移除了Java EE相关模块和CORBA。这些变化对写业务代码的人来说体感可能不明显但对运维和架构选型影响很大。1.3 windows-x64平台意味着什么包名里的“windows-x64”很好理解就是面向64位Windows系统。x64在Windows里通常对应x86_64或AMD64架构现在绝大多数Windows 10、Windows 11系统都是64位新电脑基本没有32位系统了。下载前建议先确认系统类型不是所有Windows都支持64位JDK。右键“此电脑”选“属性”系统类型里会明确写“基于x64的处理器”还是“基于x86的处理器”。如果是x64系统装windows-x64版完全没问题如果是x86系统的老机器那这个包装不了得找32位对应的版本。2. 下载前准备系统确认与安装包选型2.1 快速确认Windows系统架构除了右键“此电脑”看属性我更常用命令行的方式因为快且直观。按WinR输入cmd回车然后执行systeminfo | findstr /C:系统类型输出如果是“系统类型: x64-based PC”那就是64位系统。也可以执行echo %PROCESSOR_ARCHITECTURE%输出AMD64或x64都表示64位输出x86表示32位。这两条命令在排查环境问题时经常用到建议记一下。还有一个容易忽略的点64位系统可以跑32位软件但32位系统跑不了64位JDK。如果你拿到的机器是Windows Server且内存超过4GB几乎可以肯定是64位系统放心装。2.2 .rar包和官网.zip/.exe到底什么关系这里要讲清楚一个很多人不知道的细节。大家手里这个“jdk-11.0.12 windows-x64_bin.rar”大概率不是Oracle官网直接生成的原始安装包。Oracle官网对JDK 11 Windows x64提供的下载文件其实只有两个jdk-11.0.12_windows-x64_bin.zip压缩包解压即用jdk-11.0.12_windows-x64_bin.exe安装向导程序那.rar是哪来的本质上就是有人把官网的zip解压后再用WinRAR二次打包。好处是压缩率可能更高一点坏处是没法和官网文件校验对应安全性存疑。所以拿到.rar后我建议先做两件事看压缩包大小是否和官网zip接近看解压后目录结构是否包含bin、conf、lib、jmods等标准目录。如果只求省事我个人的习惯是优先用官网的.zip版。zip版是“绿色形态”解压到任意目录就能用系统重装后还能复用不污染注册表。.exe安装版适合不喜欢手动配环境变量的新手安装器会自动写注册表卸载也方便。另外提醒一句Windows系统原生不支持解压rar格式需要装7-Zip、Bandizip或WinRAR。7-Zip完全免费Bandizip免费版也够用这两个都支持解压rar。2.3 官网下载的完整路径与注意事项Oracle官网JDK 11下载页地址是https://www.oracle.com/java/technologies/downloads/#java11页面里选择Windows x64就能看到zip和exe两个下载链接。注意页面会先要求你勾选“同意许可协议”然后跳转到登录页需要注册Oracle账号才能下载。这个账号限制是很多人卡住的地方尤其是公司网络环境下注册邮箱验证还可能比较慢。如果不想注册账号可以改用OpenJDK构建版比如Adoptium项目也就是Eclipse Temurin版本号同样有11.0.12许可证是GPLCE商用也友好。区别在于包名不叫jdk-11.0.12_windows-x64_bin而是类似OpenJDK11U-jdk_x64_windows_hotspot_11.0.12_7.zip。功能层面日常开发基本无感。还有一个常见坑不要从无认证的下载站下“一键安装版JDK”。这些平台经常篡改文件捆绑推广软件甚至植入脚本。之前有同事图省事装完发现默认首页被改浏览器多了一堆插件排查半天才找到源头是JDK安装包里的前置脚本。这不是危言耸听确保包来源正规是安装环境的第一步。3. 安装与配置从解压到环境变量设置全流程3.1 安装目录的选择与路径规范不管用zip还是rar解压之前先想好目录。我强烈建议放在一个纯英文、无空格、无中文的路径下比如C:\Java\jdk-11.0.12D:\Java\jdk-11.0.12不要放C:\Program Files\Java\jdk-11.0.12这种带空格的路径虽然Oracke安装器默认就是这个路径在大多数场景也能用但某些老版本的Maven插件、批处理脚本、自动化部署工具处理带空格的路径时会报错排查起来极其痛苦。如果是exe安装安装向导里可以自己修改安装目录。我的做法是统一装到C:\Java这样后续配环境变量、找路径都方便。目录名建议只带版本号不要加“最新”、“下载”之类的中文后缀以免后续脚本解析出错。另外如果拿到的是zip或rar解压后务必确认根目录下有没有bin目录。有时候下载的是精简版或JRE包解压后没有javac.exe后面编译Java代码就会报错。这个问题在常见问题章节会再展开。3.2 安装过程中的几个选项用exe安装器安装JDK 11时会弹出几个选择项常见的包括是否安装公共JREPublic JRE是否安装源代码是否安装额外功能比如Java Development Kit的辅助功能我的建议是如果只是做开发公共JRE可以不勾选因为JDK目录里自带了完整的运行时。如果要做服务器部署想单独给Java应用提供运行环境可以勾选公共JRE。源代码一般不用勾选JDK目录里自带src.zip已经够用了IDE里查看源码时会直接引用。这里顺便提一个JDK 11的进阶点从JDK 9开始引入的jlink工具可以按需生成精简运行时镜像。比如你只需要java.base模块可以执行jlink --module-path %JAVA_HOME%\jmods --add-modules java.base --output C:\java\jre-min生成出来的目录可能只有30MB左右比完整JRE小非常多部署到Docker镜像里很香。这个属于锦上添花不急着现在学但知道有这个东西就行。3.3 环境变量配置这篇的核心之一配置环境变量是整个安装过程里最出问题的地方也是“java不是内部或外部命令”的头号来源。分三步走右键“此电脑” - 属性 - 高级系统设置 - 环境变量。在“用户变量”或“系统变量”里新建JAVA_HOME变量值填JDK根目录。比如我装在C:\Java\jdk-11.0.12就填C:\Java\jdk-11.0.12。找到Path变量点击编辑新建一行填入%JAVA_HOME%\bin确认保存。为什么用%JAVA_HOME%\bin而不是写死C:\Java\jdk-11.0.12\bin因为以后切换JDK版本时只需要改JAVA_HOME这一个变量Path完全不用动。这算是Java开发者约定俗成的规范也是很多教程要求统一配置的原因。关于classpath这里多说一句。很多老教程会让你新建CLASSPATH.;%JAVA_HOME%\lib这是JDK 1.4时代的老经验。JDK 1.5之后classpath就不是必须的JDK 9引入模块化之后盲目配置classpath反而可能干扰应用启动。所以现代开发环境classpath不用配配了可能给自己找麻烦。配置完环境变量后一定记得新开一个cmd窗口不要用之前打开的旧窗口。Windows的环境变量是在进程启动时读取的已经打开的窗口不会自动同步新配置。这个问题几乎每周都能在群里看到人问。3.4 system变量与用户变量的取舍环境变量界面里有两栏上面是用户变量下面是系统变量。用户变量只对当前Windows登录用户生效系统变量对所有用户生效。日常开发机配置用户变量就够不需要碰系统变量。系统变量的修改需要管理员权限而且影响面大如果一台机器有好几个用户改系统变量会影响所有人。如果是给CI服务器或多人共用的构建机配环境再考虑系统变量。还有个细节用户变量和系统变量里如果都有Path最终生效的Path是两者拼接的结果系统变量在前还是用户变量在前不同Windows版本可能有差异。这个顺序直接影响java -version显示的版本后面常见问题里会提到。4. 验证安装与开发环境对接4.1 命令行验证是否成功配置完环境变量新开一个cmd窗口依次执行以下命令java -version javac -version echo %JAVA_HOME% where java where javac预期输出java -version 会显示 java version 11.0.12 2021-07-20 LTSjavac -version 会显示 javac 11.0.12echo %JAVA_HOME% 会显示C:\Java\jdk-11.0.12where java和where javac会显示完整路径比如C:\Java\jdk-11.0.12\bin\java.exe只要这些命令正常JDK 11的安装就算完成了。这里有个小技巧执行where java后如果列出的路径不是JAVA_HOME指向的路径说明Path顺序有问题需要按后文的排查方法处理。4.2 与IDE和构建工具对接命令行验证通过后还需要让IDE和构建工具认到这个JDK。IntelliJ IDEA里这样配置File - Project Structure - Project SDK - 点击Add JDK选择C:\Java\jdk-11.0.12目录然后再把Project语言级别设置为11。Maven项目的pom.xml里建议显式配置编译器版本properties maven.compiler.source11/maven.compiler.source maven.compiler.target11/maven.compiler.target /propertiesEclipse则是Window - Preferences - Java - Installed JREs - Add Standard VM然后选择JDK目录。Gradle项目可以配置java { toolchain { languageVersion JavaLanguageVersion.of(11) } }IDE和构建工具配置的核心逻辑都一样让它们指向同一个JAVA_HOME避免“IDE里显示11命令行里是11但Maven用的是8”这种分裂状态。4.3 安装后的目录结构速认解压或安装完成后JDK根目录下会看到这样几个关键目录和文件bin存放java.exe、javac.exe、jar.exe、jlink.exe等可执行工具confJDK组件运行时的配置文件includeJNI相关的C/C头文件jmods模块镜像文件JDK 9模块化机制的载体legal各类开源协议和版权声明lib运行时库和支持文件src.zipJDK源码压缩包默认自带这里特别提醒一个变化JDK 11已经移除了Java EE相关模块所以老工具链里的wsimport、xjc、javaws等命令在JDK 11里都不存在了。如果是做WebService等老技术栈迁移要提前做好心理准备。5. 常见问题与排查技巧实录5.1 常见问题速查表现象原因解决办法java不是内部或外部命令PATH里没有%JAVA_HOME%\bin检查环境变量确保Path包含%JAVA_HOME%\bin新开cmdjavac不是内部或外部命令但java可用只装了JRE没装JDK或JAVA_HOME指向了JRE确认JAVA_HOME指向JDK根目录bin目录下有javac.exejava -version显示旧版本Path里老版本JDK或JRE路径排在前面删除旧路径或将%JAVA_HOME%\bin移动到Path靠前位置修改环境变量后不生效cmd窗口没有重新打开重新打开一个cmd窗口不要用老窗口echo %JAVA_HOME%为空变量没建对或没保存重新打开环境变量界面检查变量名和值安装exe时提示需要管理员权限UAC限制右键安装程序以管理员身份运行官网下载需要账号Oracle账号限制注册账号或改用OpenJDK构建版解压后找不到bin目录下成了JRE包不是JDK包核对包名确认是包含javac的JDK包5.2 我实际踩过的几个坑第一个坑是Path顺序问题。有一段时间我机器上同时装了JDK 8和JDK 11JAVA_HOME已经改成11但Path里旧JDK 8的bin路径排在前面导致cmd里执行java -version永远是1.8。后来把旧路径从Path里删掉只在Path里保留%JAVA_HOME%\bin问题彻底解决。经验就是一台开发机尽量只保留一个JDK非要用多版本用IDE的SDK切换别在系统Path里堆叠多个JDK路径。第二个坑是中文目录。有次图省事把解压出来的JDK放在D盘“开发工具\jdk-11”这样的目录下IDE正常但一个老项目用的Ant脚本死活报“无法识别的字符”。排查半天才发现是路径里的中文闹的。从那以后所有开发工具一律放纯英文路径省心。第三个坑是.rar包内容的完整性。曾经有人把JRE目录伪装成JDK打包上传解压后bin目录里只有java.exe没有javac.exe结果编译时全军覆没。所以拿到任何非官方压缩包先看一眼bin目录里有没有javac.exe这是判断“真JDK”的标志性文件。5.3 卸载与版本切换如果是用exe安装的JDK卸载路径在“设置 - 应用”里搜索“Java SE Development Kit 11.0.12”然后卸载。如果是zip或rar解压版直接删除整个目录再清理JAVA_HOME和Path里的对应条目即可。版本切换的核心思路只有一个JAVA_HOME指向哪个版本就是哪个版本。前提是Path里只保留%JAVA_HOME%\bin而不是一堆写死的路径。切换时只需要修改JAVA_HOME的值然后新开cmd窗口验证java -version。如果你还在用写死路径的方式管理多个JDK建议趁早改成这种方式后面会少很多麻烦。6. 顺手再做的几个小配置6.1 确认防火墙与安全软件不拦截java.exeWindows Defender或者第三方安全软件有时会把新解压的java.exe、javac.exe当作未知程序拦截。如果安装完一切正常但过几天启动项目时莫名报“拒绝访问”可以去Windows安全中心的历史记录里看看有没有拦截记录。遇到这种情况把JDK目录加入排除项即可。6.2 保存一份版本信息到项目文档这个习惯很小但实用。在项目README或者环境说明文档里明确写上JDK版本是11.0.12安装目录是C:\Java\jdk-11.0.12JAVA_HOME配置方式是什么。对于团队协作来说这个信息能省一半排障时间。我之前接手一个老项目连同事装的JDK是32位还是64位都不知道后来靠环境文档才理顺。6.3 把src.zip备份到方便的位置JDK目录里的src.zip就是JDK源码IDE里点类名跳转到源码时会用到。默认位置没问题但如果你隔段时间要清理磁盘、移动目录记得别把src.zip当垃圾文件删了。没有src.zip调试Java源码时只能看反编译结果排查问题效率会打折扣。我个人在实际操作中的体会是JDK 11的安装在2021年之后已经算很成熟的事情了真正容易翻车的地方从来不是安装本身而是路径规范、环境变量刷新、多版本冲突这些“小细节”。把基础工作做扎实后面所有Java相关的开发工具链都会顺畅很多。本文还有配套的精品资源点击获取
返回列表