JDK21与IDEA2025安装实战:从环境变量到虚拟线程

📅 发布时间:2026/10/10 9:33:49
JDK21与IDEA2025安装实战:从环境变量到虚拟线程
1. 先聊聊 JDK21 与 IDEA2025为什么是现在最值得装的一套组合作为一个从 JDK8 一路用过来的老 Java 开发者我这两年最强烈的感受就是Java 版本迭代终于不再是挤牙膏了。JDK21 作为 2023 年 9 月发布的 LTS长期支持版本到 2025 年已经过了最开始的磨合期生态、框架兼容性、第三方插件支持全部到位。而在 IDE 端IDEA 2025 版本把过去几年积累的 UI 重绘、AI 辅助、性能优化统统收进了一个年度大版本里。两者一搭配就是我目前主力开发机上的标准组合。我写这篇东西的目的很简单把从零开始安装 JDK21 和 IDEA2025 的完整过程包括 Windows 桌面机、Linux 服务器两条路线里的坑全部摊开讲清楚。适合正在配新电脑的开发者、准备给团队新服务器装 Java 环境的运维同学以及刚入门 Java 想直接上最新 LTS 的新手。这篇内容里我不会贴那种下一步、下一步、下一步的流水账截图而是把每个操作背后的原因讲明白这样你换一个版本、换一台机器照样能自己搞定。先回答一个很多人纠结的问题为什么是 JDK21而不是还在广泛服役的 JDK8 或 JDK11也不是更新的 JDK23/25JDK8 是 2014 年的东西Spring Boot 3.x 之后的生态已经全面转向 17很多新框架直接声明最低支持 17你在 8 上跑新项目会处处碰壁。JDK11 是个过渡 LTS本身没太大问题但虚拟线程这个颠覆性的东西它没有。JDK21 引入了虚拟线程Virtual Threads的正式版配合结构化并发和 Scoped Values处理高并发 IO 密集任务的写法完全变了样这是 Java 服务端领域近十年最重要的改动之一。至于 JDK23 和 JDK25它们虽然更新但都不是 LTS生产环境没必要追新学习可以干活还是 LTS 稳妥。IDEA 2025 这边的情况也类似。2020 到 2022 那几年的版本说实话性能表现一般大项目索引卡顿、内存占用高是常态。从 2023 年起 JetBrains 基于新 UI 框架重做了界面2024 年逐步补齐了功能到 2025 版本基本完成了过渡启动更快、索引更轻、内置的 AI Assistant或者你接其他 AI 插件也更顺手。如果说前两年的新 UI 是能用但不太习惯2025 版本就是默认就该这么用。所以这套组合的核心价值就一句话用当前最稳的 LTS 运行时配当前最成熟的最新版 IDE一步到位未来两三年内不用再折腾大版本升级。2. 下载前的避坑指南版本、渠道与平台差异很多人翻车不是翻在安装而是翻在下载。这一步决定你后面所有操作是否顺利。2.1 JDK21 的下载渠道怎么选目前主流渠道有这么几个我逐个说下使用场景Oracle JDK 官网oracle.com/java/technologies/downloads/最正统的渠道下载需要接受 Oracle 的协议。个人开发、学习完全免费生产环境要留意 Oracle 的收费政策但从实际项目看绝大多数中小团队用的都是 OpenJDK 系没必要纠结这个。Adoptium原 AdoptOpenJDK社区维护的 OpenJDK 发行版没有 Oracle 那套协议限制生产环境放心用。官网 eclipse.org/adoptium/选择版本 21、平台、JVM 类型HotSpot就行。腾讯、阿里、华为等国内镜像站网络原因连不上国外站点时的备选速度极快适合服务器在国内的场景。sdkmanLinux/macOS命令行安装管理工具适合运维批量处理后面 Linux 部分我会展开。我自己在 Windows 和 macOS 上一般直接用 Adoptium 的 Temurin 21服务器上用 sdkman 或 tar 包手动部署。你不需要纠结哪个更好它们 JVM 核心是一样的区别在品牌和政策不影响你写代码。2.2 IDEA2025 版本选择Community 还是 UltimateIDEA 分社区版Community和旗舰版Ultimate。Community 免费开源支持 Java、Kotlin、Gradle、Maven写普通 Java 项目完全够用。Ultimate 收费多了 Spring、JavaEE、数据库工具、Http Client 等企业开发功能。我的建议很直白如果你的项目涉及 Spring Boot 全家桶或者需要连数据库写 SQL直接装 Ultimate用官方 30 天试用 付费订阅/开源项目免费许可/教育免费许可这些正规途径用起来体验差距真的很大。如果只是写一些纯 Java 算法、练手项目或者你预算有限暂时不想付费Community 也完全没毛病——它对新 Java 语法的支持比如 record、switch 模式匹配和 Ultimate 是同一水平的。关于激活这个事我多说一句网上到处都是激活码“破解补丁”但那些东西的下载页往往捆绑木马而且 JetBrains 现在在云端校验授权破解版动不动就掉线失效。我见过的真实翻车案例太多了——写了半个月的配置被一个恶意补丁全盘加密勒索。官方途径其实没有你想的那么贵个人订阅也就一个月几十块而且第一年常年打折。如果你是学生GitHub Student Pack 里有免费的 Ultimate 授权如果你是开源项目维护者JetBrains 提供免费开源授权。这些正规渠道不值得为了省几百块去冒风险。2.3 三个平台下载时的差异点同一个 JDK21在 Windows、macOS、Linux 上的分发形态不一样平台常见文件格式说明Windows.msi / .zip建议用 .msi安装时会自动帮你写注册表但环境变量通常还是要手动配macOS.dmg / .tar.gzIntel 和 Apple Silicon 要选对架构直接决定能不能跑起来Linux.tar.gz / .deb / .rpm服务器最常用 .tar.gz解压即用不依赖包管理器macOS 上最容易踩的坑是下载了 x64 版本装在 Apple Silicon 机器上能装但性能打折还会偶尔出现奇怪异常。Linux 服务器上则要分辨清楚x86_64amd64和 arm64现在云服务器用 ARM CPU比如阿里云倚天、AWS Graviton的越来越多下载前先uname -m看一眼。IDEA2025 则主要区分 Windows / macOSIntel / Apple Silicon/ Linux逻辑同上。3. Windows 下 JDK21 的完整安装与环境变量配置3.1 安装步骤msi 向导如果你下载的是 .msi双击后会进入标准的安装向导。我建议装到一个不含空格、不含中文的路径比如D:\Java\jdk-21。这不算洁癖——很多旧版脚本、Maven 插件、Tomcat 启动脚本对带空格的 JAVA_HOME 处理有历史 bug。默认的C:\Program Files\Java\jdk-21本身没问题但后续配一些外围工具时偶尔会遇到奇葩问题干脆从一开始就避开。安装时它会提示让你选三个组件Development Tools、Source Code、Public JRE。Development Tools 必须勾选这是 JDK 本体Source Code 建议勾上调试时看 JDK 源码很有用Public JRE 那个是独立 JRE可以不装因为我们平时跑 Java 用的就是 JDK 里面的 JRE独立装一个纯属给自己留一个容易版本混淆的定时炸弹。安装完成后先验证一下能不能直接用java -version。如果弹出的是没有这个命令那很正常因为 Windows 安装器默认不会把 Java 加进 PATH接下来要手动配置。3.2 环境变量配置JAVA_HOME 与 PATH 的原理这一步很多教程就甩一张截图让你照着填但没讲清楚为什么配。我补上原理。Windows 的应用程序在运行时会从 PATH 环境变量里依次查找命令。你敲java的时候系统就是在 PATH 列出的所有目录里找一个叫java.exe的文件。所以想让java命令全局可用就要把 JDK 的bin目录加进 PATH。那为什么要单独配一个 JAVA_HOME 呢因为很多 Java 生态工具Maven、Gradle、Tomcat、IDEA 本身需要知道JDK 装在哪才能工作。它们不约而同地从系统读取一个叫JAVA_HOME的环境变量。如果未来你需要切换 JDK 版本比如临时切回 17只需要改 JAVA_HOME 一个变量PATH 里用占位符引用它就自动跟着变不需要再动 PATH。这是配置环境变量的标准姿势。具体操作右键此电脑 → 属性 → 高级系统设置 → 环境变量。在系统变量里点击新建变量名JAVA_HOME变量值你 JDK 实际安装路径例如D:\Java\jdk-21找到系统变量里的Path双击编辑点击新建添加两个条目%JAVA_HOME%\bin%JAVA_HOME%\bin\server这个不是必须的但个别使用 JVM 动态库的项目会需要全部点击确定保存。这里有个常见误区有人把bin路径写成真的绝对路径D:\Java\jdk-21\bin也能用但一旦以后升级 JDK 就得手动改 PATH。我用%JAVA_HOME%占位的方案以后只需要改一个变量省心得多。3.3 验证安装是否成功配置完后必须重新打开一个命令行窗口因为已经打开的窗口不会刷新环境变量。然后依次执行java -version javac -version echo %JAVA_HOME%理想输出是类似这样java version 21.0.3 2024-04-16 LTS Java(TM) SE Runtime Environment (build 21.0.37-LTS) Java HotSpot(TM) 64-Bit Server VM (build 21.0.37-LTS, mixed mode, sharing)注意要同时确认javac也能输出版本。java只是运行环境我们写代码还得靠javac编译。如果只能看到java看不到javac多半是环境变量指向了独立的 JRE 而不是 JDK检查一下 JAVA_HOME 是否真的指向了 JDK 根目录。另外echo %JAVA_HOME%如果输出的不是你刚设置的路径八成是你在用户变量和自己的环境变量窗口之间搞混了。两个同名变量系统变量优先级更高如果用户变量里也有一个旧的 JAVA_HOME某些场景下会覆盖系统变量这是 Windows 一个非常容易踩的坑。解决办法是把用户变量里的 Java 相关变量全部删掉统一放系统变量里。4. Linux 服务器安装 JDK21下载、解压、环境变量一步到位热搜里专门有linux新安装的服务器如何设置jdk21环境变量和jdk21 linux安装包下载说明这确实是高频需求。服务器环境没有图形界面操作方式和 Windows 完全不同我按完整链路走一遍。4.1 下载安装包和上传服务器服务器装 JDK 有两种常见方式方式一yum/apt 包管理器安装简单但版本不可控以 CentOS 系为例直接yum install java-21-openjdk装完就能用。但问题也在这——系统源里的版本往往滞后而且不同发行版的命名规则不一样你没法精确控制补丁版本。个人开发服务器无所谓生产环境我强烈建议用第二种。方式二下载官方 tar 包手动部署可控性最强先在本地或服务器上直接下载# 在服务器上下载 Adoptium Temurin 21 的 Linux x64 版本 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如果服务器在国内GitHub 下载可能很慢可以改用国内镜像源或者本地下载后通过scp传上去scp OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz user你的服务器IP:/opt/4.2 解压与安装位置规划我习惯把 JDK 统一放在/opt/java目录下这样后续管理多个版本时结构清晰mkdir -p /opt/java tar -xzf OpenJDK21U-jdk_x64_linux_hotspot_21.0.3_9.tar.gz -C /opt/java cd /opt/java ls # 解压后是一个类似 jdk-21.0.39 的目录注意 Linux 下目录名里的号在后续写配置时可能需要转义我一般会做个 symlink把无版本号的链接指向当前使用的版本ln -s /opt/java/jdk-21.0.39 /opt/java/current这样 JAVA_HOME 指向/opt/java/current以后升级只需要解压新包、删掉旧链接、重建链接业务脚本无需改动。这是我在生产环境摸爬滚打后总结的比较优雅的版本管理方式。4.3 环境变量设置一次性生效 vs 永久生效Linux 下设置环境变量要考虑给谁生效、持续多久两个问题。仅当前登录会话生效临时验证用export JAVA_HOME/opt/java/current export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar这个只在当前 shell 有效关掉终端就失效适合先快速测试。永久生效写入配置文件服务器的 Java 环境一般是给所有用户用的我建议写到/etc/profile.d/java.sh而不是直接改/etc/profile或~/.bashrc。因为/etc/profile.d/下的所有.sh文件会在每个用户登录时自动被加载既保持了全局生效又不污染主配置想禁用某个环境时直接删对应文件即可vim /etc/profile.d/java.sh写入以下内容export JAVA_HOME/opt/java/current export PATH$JAVA_HOME/bin:$PATH关键一步写完配置后立即source /etc/profile.d/java.sh让当前会话生效再验证source /etc/profile.d/java.sh java -version javac -version如果java能用但javac报找不到命令那几乎是同一个原因JAVA_HOME 写错了或者 PATH 里/usr/bin/java这种系统自带的老版本排在了前面。用which java检查实际执行的是哪个路径再用echo $PATH查看优先级问题基本一目了然。4.4 服务器上容易被忽略的细节多租户 vs 单 Java 环境生产服务器上有个高频问题系统自带 OpenJDK 8 或者装 Hadoop/ES 时给你带了一个旧 JDK等你配好了 JDK21 却发现java -version还是旧的。原因就是 PATH 里/usr/bin/java那个旧版本排在前面。解决方法是确保 JAVA_HOME/bin 在 PATH 最前面我们上面的写法PATH$JAVA_HOME/bin:$PATH已经做到了。另外有些服务是通过 systemd 启动的systemd 的服务单元文件里定义的环境变量优先级高于 shell 配置文件。如果你的服务用 systemd 管理需要在 service 文件里也配一份[Service] EnvironmentJAVA_HOME/opt/java/current EnvironmentPATH/opt/java/current/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin这一点特别容易踩坑终端里java -version是 21服务启动时却用的旧版本最后排查半天发现是 systemd 环境变量没同步。我建议在服务器初始化清单里就把这一条列进去。5. IDEA2025 安装与首次启动配置JDK 装好之后接下来是 IDE 这边。5.1 下载和安装向导到 JetBrains 官网下载对应平台的安装包。Windows 下我建议选 .exe 安装版安装时勾选Create Desktop Shortcut和Update PATH variable。虽然不勾 PATH 也能用但以后你可能要在命令行里跑idea .直接打开项目目录这个功能依赖 PATH。安装向导里有几个选项要注意Install as SERVICE不建议装IDEA 是交互式 GUI 工具没必要做成系统服务反而可能在无桌面环境下启动失败。Download JBRJetBrains Runtime建议勾选。IDEA 自身运行需要一个 JVM很多新手误以为装好 JDK 就够其实 IDEA 需要它自己附带的运行时旧版本不带的话首次启动会有各种问题。2025 版本默认带 JBR 21这也是我推荐大家 JDK 直接用 21 的另一层原因——IDE 运行时和项目运行时版本一致排查问题少一层干扰。安装路径同样建议无空格无中文。5.2 首次启动的配置顺序第一次启动 IDEA它会引导你做三件事顺序和默认值其实都有讲究。第一步主题和 UI 设置。2025 版本默认引导选择新 UI 还是经典 UI。我建议直接用新 UI别回去用经典了——JetBrains 已经在 2025 这个年度版本里把新 UI 的性能和功能补齐老 UI 未来会逐步退出主流测试你现在适应新 UI 比以后被迫切换成本低。第二步配置 JDK。启动后的欢迎页选Customize→All settings→Build, Execution, Deployment→Build Tools→Gradle之类的 JDK 设置入口或者在项目里通过File→Project Structure→SDKs添加。把这个路径记清楚很多新手拿着一台装好 JDK 的新机器打开项目却发现 IDE 找不到 JDK就是这个入口没配。添加 JDK 时选择你刚刚装好的 JDK21 根目录Windows 下是D:\Java\jdk-21Linux 下是/opt/java/current。IDEA 会自动探测到javac并在 SDK 列表里显示为 21。第三步导入配置 vs 全部默认。如果你在另一台电脑上用过旧版 IDEA可以导出配置File→Manage IDE Settings→Export Settings新版上导入。如果之前没有我建议全部默认初始化不要乱选 Import Settings否则可能带入一堆过时配置反而把新版干净状态毁了。5.3 授权正版激活的几种正规路子我以为说到这IDEA2025 的部分就算齐了。但必须专门写一节讲授权因为IDEA2025激活在上热搜激活工具“激活码”的搜索结果也满天飞里面混着绝大多数是盗版下载站和恶意软件。先说清楚合法的途径其实没你想象中费钱JetBrains 个人订阅按年付费首年常年打折订阅期间所有 JetBrains IDE 都可用包含 IDEA Ultimate。学生/教师免费授权用学校邮箱在 JetBrains 官网提交认证获批后免费使用 Ultimate包含全部功能。开源项目免费授权你的项目在 GitHub 上开源维护超过 3 个月且不盈利JetBrains 会提供免费授权。30 天免费试用官方提供 30 天全功能试用你可以放心用完整功能跑完一个项目周期再决定是否购买。我见过最惨的一个案例一个新手为了省钱去论坛下了个一键激活工具装完 IDEA 确实显示激活成功但三天后整个电脑开始弹广告、挖木马最后用杀软扫出来三个木马文件全部心血差点报销。激活工具本质就是往你系统里塞不明代码永久免费的午餐背后一定有代价。与其赌这个不如走官方 30 天试用或者用 Community 版功能足够覆盖大部分日常开发。6. 安装完成后必须做的三件事装好 JDK21 和 IDEA2025如果你直接开一个新项目开始写其实已经能跑了。但我实测下来下面三件事不提前做很快就会回来找你麻烦。6.1 配置 Maven 镜像IDEA 自带的 Maven 默认从中央仓库下载依赖而中央仓库服务器在海外国内网络下载 jar 包速度可以慢到让你怀疑人生。第一次 build 一个 Spring Boot 项目mvn clean install卡在下载spring-boot-starter-parent上半小时破防的案例我见得太多了。正确姿势是在 Maven 的settings.xml里配置阿里云镜像或者其他国内镜像选一个速度稳定的就行mirrors mirror idaliyunmaven/id mirrorOfcentral/mirrorOf namealiyun maven mirror/name urlhttps://maven.aliyun.com/repository/central/url /mirror /mirrorsIDEA 中还需要到Settings→Build, Execution, Deployment→Build Tools→Maven把 User settings file 指向你修改后的settings.xml。这一步不做你的 IDEA 配置了别名也没用照样卡下载。6.2 关掉不必要的索引项IDEA2025 的索引机制比旧版好了不少但如果你导入的是一个很大的多模块项目头几次索引依旧很吃 CPU 和内存。很多新人以为是电脑不行急着加内存条其实可以从设置层面做减法进入Settings→Editor→File Types检查是否把node_modules、target、build这类目录标记成了忽略/排除目录。Maven 和 Gradle 项目里这些目录是编译产物索引它们是纯浪费。在项目视图里右键target目录选择Mark Directory as→Excluded。处理完你会发现 Air 类自动提示的速度肉眼可见变快。6.3 试试虚拟线程的新写法装好新环境不试试虚拟线程就太浪费了。随手写一个最小示例验证你的 JDK21 环境真的完整public class VirtualThreadDemo { public static void main(String[] args) throws Exception { long start System.currentTimeMillis(); for (int i 0; i 100; i) { Thread.ofVirtual().start(() - { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } }); } System.out.println(100 个虚拟线程启动耗时: (System.currentTimeMillis() - start) ms); } }如果你在 21 以下的版本跑这个代码会直接编译报错因为在 21 里Thread.ofVirtual()才有正式 API。IDEA2025 里你甚至会发现语法高亮直接认它错误提示也几乎为零——这本身就是JDK21 新 IDE组合的一种隐式验证。7. 常见安装问题与排查思路环境安装这东西最怕的是装完也不知道装没装对。我把日常被问到最多的几个问题整理成一张排查表每个都给出先看哪里、怎么修的思路。现象最可能的原因排查步骤与解法java命令找不到PATH 没配好检查echo $PATH/%PATH%是否包含 JDK 的 bin 目录确认 bin 目录确实存在java -version显示旧版旧版本排在前运行which java查看实际路径调整 PATH 顺序确保 JDK21 的 bin 在前javac找不到装的是 JRE 而不是 JDK检查 JAVA_HOME 是否指向 JDK 根目录Windows 下检查是否误装了独立 JREIDEA 无法识别 JDKProject SDK 未设置File→Project Structure→SDKs手动添加 JDK 路径IDEA 启动失败或闪退JBR 缺失 / 内存不足重新运行安装包勾选下载 JBRidea64.exe.vmoptions增加 -XmxMaven 下载依赖极慢没配镜像修改 settings.xml 配阿里云镜像重启 IDEAsystemd 服务用旧 JDKservice 里有自己的环境在 service 文件的[Service]段里显式声明 JAVA_HOME 和 PATH编译提示不支持发行版本 21项目语言级别未对齐检查 Project Structure 里的 Language level 是否设为 21Maven compiler 插件版本是否够新7.1 编译报不支持发行版本 21的深层原因这个报错在新旧环境交替时太常见了你 JDK 早就装成了 21IDEA 里也能看到 21但项目一编译就报错。问题的根子在三个地方可能不一致Project Structure → Project → SDK这里决定整个项目用的 JDK。Project Structure → Modules → Language level这里决定代码用 Java 21 语法还是旧语法。Maven/Gradle 的 compiler 插件版本Maven 默认的 compiler 插件旧版本只支持到 Java 8 或 11需要显式提版本。这三处只要有一处停留在旧版本就会出现明明环境是 21编译还是老语法的怪象。我通常三步统一SDK 选 21、Language level 选 21Preview 选项仅在你想用预览特性时勾选、pom.xml 里配置maven-compiler-plugin到 3.13.0 以上并声明source和target为 21。7.2 环境变量改完不生效的真实案例有一次我在 Windows 服务器上配完 JAVA_HOME 和 PATH重新开了一个 cmd 窗口结果java -version还是旧的。查了半天发现是用户变量里也有一个 PATH把系统变量里的 JAVA_HOME 覆盖了。Windows 在合并用户变量和系统变量时用户变量追加在系统变量之后所以如果系统变量里已经有%JAVA_HOME%\bin用户变量里又有一个旧的绝对路径 bin系统会先匹配到后面的旧路径吗不是实际规则是两个变量合并时系统变量在前用户变量在后所以如果系统 PATH 里%JAVA_HOME%\bin已经写到了 JDK21按理说会先命中。真正的问题出在用户变量里如果定义了 JAVA_HOME它会覆盖系统变量的 JAVA_HOME因为用户级变量在系统级之后加载Windows 会以后出现的为准。那次最后就是删掉了用户变量里的 JAVA_HOME 和 Path 里的 Java 相关项清清爽爽只在系统变量配一遍问题立刻解决。7.3 验证 JDK 安装的终极标准很多教程只让你跑java -version其实这只验证了 JRE没验证编译器和一些核心组件。我做环境验收时会跑一组完整的命令尤其给服务器用的时候java -version javac -version keytool -help # 验证安全组件 jcmd # 验证诊断工具能输出 JVM 进程信息 jshell # 验证交互式编程环境jshell能起来说明整套 JDK 工具链完整那一瞬间弹出jshell提示符环境就算真的装好了。IDEA 里我则用一次mvn clean package整个流程跑通来验收比任何配置检查都靠谱。最后说两句掏心窝的话装环境这个事说难也难说简单也简单关键点是理解每个文件、每个命令、每个变量背后的作用。JDK21 和 IDEA2025 这套组合我用了快半年最大的感受是虚拟线程真的能救你的高并发项目于水火新 IDE 真的不再像以前那样让风扇狂转。如果你读到这里正准备动手我建议你先拿一台闲置机器或者虚拟机完整走一遍流程Windows 和 Linux 两条线都配一次把上面那张排查表记在心里。以后再遇到装 Java 环境你就不是照着教程点下一步的人而是那个能帮别人填坑的环境老手了。