做 Java 开发的同学最近应该都有明显感觉:2024 年还有人抱着 Java 8 不放,到了 2025 年,身边讨论 JDK21 的人越来越多,IDE 也慢慢换到了 IntelliJ IDEA 2025 这个新版本。正好这几天帮同事处理了两台机器,一台 Windows 本机,一台刚初始化完的 Linux 服务器,把 JDK21 和 idea2025 安装全流程走了一遍。这篇文章就围绕这件事展开,讲清楚 JDK21 安装包怎么选、Windows 和 Linux 下环境变量怎么配、IDEA 2025 怎么和 JDK21 关联,再把我实操中踩过的坑和排查思路一并整理出来。无论你是刚入门想照着抄作业,还是老程序员准备升级开发环境,这份记录都能给你一个完整的参考。
1. 动手之前:JDK21 和 IDEA 2025 到底是什么组合
1.1 JDK21 到底带来了什么
JDK21 是 Oracle 在 2023 年 9 月发布的长期支持版本,LTS 意味着它能获得长时间的安全补丁和稳定性更新,对于企业项目来说,这是从 Java 8 或 Java 11 直接跳升的最佳目标版本。很多团队卡在 Java 8 不升,本质原因是“不值得折腾”,但只要仔细看过 JDK21 的更新列表,这个顾虑基本会被打消。
JDK21 里最值得关注的是虚拟线程,这是 JEP 444 正式带来的功能。以前 Java 处理高并发靠线程池,线程多了之后上下文切换开销巨大,而虚拟线程由 JVM 调度,一个平台线程可以承载成千上万个虚拟线程,写并发代码就像写顺序代码一样简单,性能还比传统方式好不少。我自己的一个线上消息处理程序,用 JDK21 的虚拟线程重写后,吞吐量提升非常明显,而代码改动量却小得惊人。
除了虚拟线程,记录模式(Record Patterns)和 switch 模式匹配也让代码简洁了很多。以前要写一堆 instanceof 判断和强制类型转换,现在一个模式匹配表达式就能解决。另外,JDK21 还引入了分代 ZGC,把 ZGC 的停顿时间进一步压低,大堆内存应用也能实现极低延迟。这些特性单独看可能觉得没什么,但组合在一起,就是让 Java 这门语言重新变得性感。需要注意一点,字符串模板(String Templates)在 JDK21 中还是预览特性,生产环境使用要谨慎,别把预览 API 当正式 API 写到长期维护的代码里。
对于像我这种 Windows 和 Linux 两套环境都要维护的人,JDK21 还有一个隐藏好处:它已经是比较新的 LTS,社区里针对它的坑和解决方案已经沉淀得足够多。遇到环境问题搜答案,不会像当年 Java 9 时代那样连个靠谱对照都没处找。
1.2 为什么选择 IDEA 2025 搭配 JDK21
IntelliJ IDEA 2025 这个版本,名字就直接对应年份。它在启动速度、内存占用和 JDK 识别上做了不少优化。尤其是对新版本 JDK 的支持,IDEA 2025 从代码提示到编译运行都做了针对性适配,比如虚拟线程相关 API 的补全、新语法特性的高亮检查,老版本 IDEA 打开 JDK21 项目时偶尔会出现“误报错”或者提示不完整的问题,这些问题在新版本上基本绝迹。
版本组合上,我推荐 Ultimate 和 Community 两种选择:个人学习、写小型项目,Community 社区版完全够用,免费且无功能限制;商业项目开发需要 Spring、数据库工具这类高级功能,可以走 JetBrains 官方订阅或试用。IDEA 启动了正版授权体系,打开软件后用 JetBrains 账号登录即可,公司有 License Server 或者订阅的话在 Settings 里配置一下就能激活。注意千万不要到处找破解补丁和注册码,一个是安全风险极大,另一个是新版 IDEA 对激活信息的校验越来越严格,出了问题很难排查,不如正规渠道来得省心。
另外一个实用建议是,安装 IDEA 2025 前先把 JDK21 搞定,因为 IDEA 本身虽然内置了 JBR(JetBrains Runtime),但新建项目时如果没有外部 JDK,你只能选择 IDEA 自带的版本,那并不是完整的 JDK 开发环境。先把 JDK21 配好,IDEA 里指定一下,整个链路就通了。
2. 下载准备:JDK21 安装包怎么选、去哪下
2.1 Windows 下选择哪个 JDK 发行版
很多新手上来就搜“jdk21 下载”,结果在五花八门的网站里迷了路。其实 JDK 的发行版远不止 Oracle 一家,选哪个取决于你的用途。如果是做 Java 标准开发,我建议优先考虑这几个主流发行版:
Oracle JDK 是官方原版,商业使用有许可限制,但个人开发、学习和很多非商业场景都能用,优点是和官方文档一致,版本更新及时。OpenJDK 是开源的参考实现,官方构建版本一般,生产上很多人不直接用。Eclipse Temurin 是 Adoptium 社区维护的 OpenJDK 发行版,完全开源、免费,可以作为 Oracle JDK 的替代品,尤其适合追求免费和稳定的团队。Amazon Corretto 是 AWS 维护的发行版,兼容性很好,云上部署顺理成章。
我个人的选择逻辑很简单:如果是个人电脑上学习、实验或者给公司做开发,直接下载 Oracle JDK 21,省事;如果是 Linux 服务器生产环境,想完全避开许可问题,用 Eclipse Temurin 或 Corretto 都行,下载地址分别在 adoptium.net 和 aws.amazon.com/corretto,这些站点都是正规来源,不要随手在个别博客里挂的私链下载安装包。
下载时还要留意架构,Windows 上绝大多数是 x64,如果你的笔记本是高通 ARM 芯片,就选 aarch64 版本。这个细节很关键,选错架构哪怕安装成功,也容易出现“找不到主类”这类跑不起来的诡异问题。下载完成后,我建议顺手校验一下文件哈希值,官方页面会给出 SHA256 校验码,在 PowerShell 里执行 Get-FileHash 命令计算本地安装包的哈希值,比对一致再安装,能挡住至少九成的“下载文件损坏”问题。
2.2 Linux 服务器下载 JDK21 安装包
Linux 新服务器装 JDK21,很多人第一反应是用 apt install openjdk-21-jdk 或者 yum 安装。这个思路没错,但很多刚初始化的服务器上系统源里的 openjdk 版本比较旧,或者根本没有 openjdk-21 这个包。即使有,你想装 Oracle 官方 JDK21 也不方便从源里装。所以更通用的方案是手动下载 tar.gz 包再解压。
以 x64 Linux 为例,我一般是先下载 jdk-21_linux-x64_bin.tar.gz 到服务器 /tmp 目录,然后用 tar 解压到 /opt 下。手动安装的优点很明显:版本完全可控,装到哪个目录你说了算,环境变量也清清楚楚。缺点就是你得手动维护,但这对我来说并不是麻烦,反而让服务器的 Java 环境更透明。
在 Linux 上,我更推荐 Temurin 发行版,因为它的 tar.gz 包对纯命令行环境非常友好。下载命令大概长这样:
wget https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.3%2B9/OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz注意链接里的 %2B 是 + 号的编码,在 wget 里直接写加号也可以,但写全链接更保险。下载完以后执行:
sha256sum OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz把输出的哈希值和官网提供的校验码比一比,一致后再解压。这一步没人强迫你做,但我见过太多人在服务器上装了损坏的 JDK,然后折腾半天才发现是安装包本身有问题。因为这些网络下载经常中断,wget 默认断点续传也可能留下一个看起来完整实际截断的文件。
3. Windows 环境安装 JDK21 与配置环境变量
3.1 安装包执行与目录规划
Windows 下 Oracle JDK21 的安装包是一个 exe 文件,双击运行,建议不要直接默认路径,而是把安装目录改成一个简洁、无空格、无中文的路径。我习惯装到 C:\Java\jdk-21 或者 D:\Java\jdk-21。为什么这么讲究?因为路径里有空格和中文,在 IDEA 的构建工具、Maven 插件以及一些命令行脚本里,很容易出现路径解析错误,特别是国内用户系统用户名经常是中文,默认安装路径很容易踩中这个雷。
JDK21 的安装过程和老版本不太一样,安装包里不会单独出现“公共 JRE”选项,因为从 JDK 9 以后,JRE 就不再单独发布了,而是集成在 JDK 里。安装过程中你只需要把“源代码”、“开发工具”这些组件全部勾上,一路确认即可。还有一个细节,安装完成后系统里可能已经有旧版本 JDK,Oracle 安装程序会询问你“是否注册 Java 的自动更新”,建议取消,因为开发机上你更希望用哪个版本完全是可控的,自动更新反而会把环境搞乱。
装完以后先别急着打开 IDEA,立刻去做环境变量。很多人以为装完就完事了,实际上如果没有配置环境变量,IDEA 里虽然能识别到 JDK,但命令行里的 java、javac 全都会报“不是内部或外部命令”,后面排查起来非常头疼。
3.2 JAVA_HOME 和 PATH 怎么配才标准
在 Windows 上配置环境变量,我推荐在“系统变量”里操作,而不是“用户变量”。原因很简单:系统变量对所有用户生效,并且能避免一些工具读取 getUserHome 路径时出现不一致问题。具体流程是右键“此电脑”选“属性”,点击“高级系统设置”,进到“环境变量”窗口,然后在系统变量区域点击“新建”,变量名写 JAVA_HOME,变量值写你的 JDK 安装路径,比如 C:\Java\jdk-21。
接下来编辑 Path 变量,在变量值的末尾添加一行 %JAVA_HOME%\bin,注意是追加,不要把原有的 System32 那些条目删掉。这里用相对引用而不是写死绝对路径,是怕以后升级 JDK 版本时到处改 Path。用 %JAVA_HOME%\bin 只需要改 JAVA_HOME 一个地方,所有引用自动生效。关于 CLASSPATH,我只想说一句:新版本的 JDK,没有人再去手动配置 classpath 了,JVM 会自己找标准库,你的项目依赖由 Maven/Gradle 管理,所以千万别在网上抄那种老教程,新建一个 CLASSPATH 变量指向 lib,纯属给自己找麻烦。
配置完环境变量后,有一个最重要的动作:关掉当前所有命令行窗口,重新打开一个新的 CMD 或 PowerShell。不管是 CMD、PowerShell 还是 IDEA,启动的那一刻都会读取环境变量快照,之前已经打开的窗口不会自动拿到新的变量,我见过太多人配好环境变量后顺手在旧窗口敲 java -version,结果报错,以为没配上,反复折腾半天。这个问题无解,只能重新打开窗口。
3.3 验证安装到底看什么
重新打开一个新的命令提示符窗口,依次执行:
java -version javac -version正常情况下 java -version 会输出类似 openjdk version "21.0.3" 或者 java version "21.0.3" 以及一些运行环境信息。javac -version 则会输出 javac 21.0.3。这里有两个容易踩的坑:
第一个坑是,如果你电脑里以前装过其他 JDK,执行 java -version 显示的却不是 21,那说明 PATH 里有一个更靠前的旧 JDK 路径,把 Path 里旧 JDK 的条目删掉,或者把 %JAVA_HOME%\bin 往前挪到最前面。第二个坑是,执行到 javac 时提示“无法运行”,但 java -version 正常,这通常是你只装了 JRE 而不是完整 JDK。JDK21 安装包不会出现这种情况,但如果你当初图省事装了 JRE,就会遇到。
我还习惯顺手验证一下 JAVA_HOME 是否被正确识别:
echo %JAVA_HOME%输出结果应该和你设置的路径完全一致,多一个斜杠、少一个空格都会让后面的工具栽跟头。Windows 上环境变量配置完成,IDEA 安装好后能自动检测到这个 JDK,整个过程到这里就顺利贯通了。
4. Linux 服务器安装 JDK21 与全局环境变量配置
4.1 解压安装和目录约定
Linux 新服务器安装 JDK21 的第一件事,不是下载,而是先确定目录结构。我习惯统一放在 /opt 下,原因很简单:/opt 本来就是存放第三方独立软件的规范路径,权限也更清晰。服务器上如果有多个 JDK 版本,还可以用 /opt/jdk-21 这样带版本号的目录,一目了然。具体操作:
mkdir -p /opt/java tar -zxvf /tmp/jdk-21_linux-x64_bin.tar.gz -C /opt/java mv /opt/java/jdk-21.0.3 /opt/java/jdk-21解压完成后,检查一下目录:
ls /opt/java/jdk-21/bin/java看到 bin/java 存在,说明解压没问题。这里提醒一点:如果服务器上内存比较紧张,解压 tar.gz 是一个 CPU 密集操作,不要一边解压一边跑大任务,否则服务器可能卡顿,看起来像死机。
Linux 上还有一种更“正规”的安装方式,用系统的 update-alternatives 来管理 JDK 版本。它能让你在系统里同时装多个 JDK,需要切换时一条命令就能完成。我强烈建议服务器上尝试一下,因为线上环境经常遇到“某个老应用只兼容 JDK11,另一个新应用需要 JDK21”的情况,靠手改环境变量切换很容易切混乱,而 update-alternatives 就是为这个场景设计的。具体路径和方式我放在后面第 4.3 小节讲。
4.2 Linux 环境变量配置的最佳实践
很多博客会叫你直接编辑 /etc/profile,把 JAVA_HOME 塞进去。这个做法能用,但不够优雅,因为 /etc/profile 是全局配置的“主入口”,升级系统、安装其他软件时可能会被覆盖或冲突。我推荐的方案是使用 /etc/profile.d/ 目录下的独立脚本文件。
在 /etc/profile.d/ 下新建一个 jdk21.sh,写入以下内容:
export JAVA_HOME=/opt/java/jdk-21 export PATH=$JAVA_HOME/bin:$PATH保存后,重新登录服务器或者执行 source /etc/profile 让脚本生效。这个方式的优势在于:/etc/profile 启动时会自动加载 /etc/profile.d/ 下所有 .sh 脚本,相当于把你的个性化配置和系统默认配置解耦了,以后卸载 JDK21 时,只需要删除这一个文件,干净利落。
验证时同样要注意,必须新开一个终端会话,或者执行 source /etc/profile 再验证,因为当前会话里的环境变量不会自动刷新。执行:
java -version which javawhich java 应该输出来自 /usr/bin/java 或者 $JAVA_HOME/bin/java 的路径。如果你执行 which java 查不到,说明 PATH 里没有变量,检查一下 jdk21.sh 的权限:
chmod 644 /etc/profile.d/jdk21.sh保证它对所有用户可读即可,因为 profile 脚本只需要读取权限,不需要执行权限。
除了终端用户环境,Linux 服务器还有一个容易被忽略的场景:通过 systemd 启动的服务进程不会读取 /etc/profile.d。如果你部署的应用是用 systemd 管理,即使 JAVA_HOME 配好了,服务进程也拿不到这个变量。这种情况下我建议在 service 文件里显式写 Environment="JAVA_HOME=/opt/java/jdk-21",或者更常见的做法是把 java 路径做成符号链接:
ln -sf /opt/java/jdk-21/bin/java /usr/bin/java这样应用直接调用 java 命令时,走的还是你指定的 JDK21,绕开了环境变量的生效范围问题。
4.3 多版本 JDK 切换:update-alternatives
真到了服务器上同时需要 JDK11 和 JDK21 的时候,手动改 /etc/profile.d 就太痛苦了。Debian/Ubuntu 系的 update-alternatives 是标准动作。把两个 JDK 都解压好之后,执行:
update-alternatives --install /usr/bin/java java /opt/java/jdk-21/bin/java 2100 update-alternatives --install /usr/bin/java java /opt/java/jdk-11/bin/java 1100 update-alternatives --config java这里末尾的 2100 和 1100 是优先级,数字大的默认被优先选中。执行 update-alternatives --config java 后,系统会列出所有已注册的 java 链接,你输入编号就能切换。注意到我装的是 /usr/bin/java 而不是 /usr/local/bin/java,这是因为 update-alternatives 默认管理 /usr/bin 下的链接,如果你习惯装在 /usr/local 下,也可以对应改成 /usr/local/bin/java,逻辑完全一样。
JAVA_HOME 也可以交给 update-alternatives 管理,再创建一个 jdk 组:
update-alternatives --install /usr/bin/javac javac /opt/java/jdk-21/bin/javac 2100然后配置 JAVA_HOME 时指向 /usr/lib/jvm 之类的动态链接路径,但这一套配置对新手来说确实复杂了一些。如果你只有一台服务器,只跑一个应用,我建议用第 4.2 小节的 profile.d 方案就够了;只有当你明确知道自己要频繁切换 JDK 版本时,才值得引入 update-alternatives。
5. IDEA 2025 安装与 JDK21 的关联配置
5.1 IDEA 2025 安装流程要点
IDEA 2025 的安装本身不复杂,从 JetBrains 官网下载对应系统的安装包(下载地址直接搜“IntelliJ IDEA download”就能看到官方入口),Windows 版是一个 exe 安装器,运行后基本一路 Next。需要注意几个安装选项:
第一个是安装路径,同样不要带中文和空格,建议 D:\Program Files\JetBrains\IntelliJ IDEA 2025 这类较短的路径。第二个是安装器会问你要不要创建“64 位启动器”和“创建关联文件”,建议全部勾上,右键 .java 文件直接用 IDEA 打开非常方便。第三个是安装完成后会问你要不要立即启动,可以先不启动,因为最好先去确认 JDK 环境已经配好了。
如果你的机器是 Linux 桌面环境,IDEA 2025 的安装方式是下载 tar.gz 后解压到 /opt,初次启动运行 bin/idea.sh 即可。可以顺手创建一个桌面快捷方式。这里需要注意,Linux 桌面上运行 IDEA,同样得注意 JDK 环境变量,因为 IDEA 启动脚本会调用系统的 java 判断运行环境,虽然它也会使用内置的 JBR,但如果 JAVA_HOME 配置错误,某些插件和构建工具依然会报错。
启动后的首次欢迎界面,会引导你选择主题、导入以前的配置等。我自己一般选择不导入,直接全新的开始,避免上一版本遗留的配置和新版冲突。
5.2 在 IDEA 2025 里把项目 SDK 指定为 JDK21
IDEA 安装完以后,最关键的一步就是把项目里的 SDK 指向 JDK21。操