src.zip 是 jdk 官方发布的标准库源码压缩包,ide 无法跳转源码主因是未配置其路径;需在 sdk 设置中正确绑定 $java_home/src.zip,而非解压或误配至 classpath。

src.zip 是什么,为什么 IDE 里点不进 String 的源码
它就是 JDK 官方发布的、未经编译的 Java 标准库源代码打包文件,路径通常在 $JAVA_HOME/src.zip。IDE 点不进 String 或 ArrayList,根本原因不是没装 JDK,而是没告诉 IDE:“源码在这儿”。JDK 自带的 rt.jar(或模块化后的 java.base)只含字节码,没有 .java 文件。
常见错误现象:
• Ctrl + 左键点 System.out.println,跳转到反编译的伪代码(一堆 /* compiled code */)
• 查看类声明时显示 “Source not found”,附带一个 “Attach Source…” 按钮
- 别手动解压
src.zip—— IDE 原生支持直接读 zip,解压反而可能引发路径或编码问题 - 如果你用的是 JDK 17+(特别是 Oracle 或 Eclipse Temurin),确认你下载的是 “Full JDK” 包,某些精简版(如某些 Docker 镜像里的
jre或jdk-headless)根本不带src.zip - macOS 上通过 Homebrew 安装的 OpenJDK,默认不放
src.zip,得额外装openjdk-src包(Homebrew 公式名)
IntelliJ IDEA 中关联 src.zip 的实操步骤
核心动作就两步:定位 JDK 配置 → 绑定源码路径。不是项目设置,是全局 SDK 设置。
- 打开 File → Project Structure → SDKs,选中你当前用的 JDK(比如
17 (17.0.x)) - 展开
Sourcepath条目,点击+号 → 选择$JAVA_HOME/src.zip(Windows 下可能是%JAVA_HOME%\src.zip) - 如果
Sourcepath下已有条目但显示红色(路径失效),直接删掉再重加 - 改完后,重启 IDE 或至少重新加载项目(File → Reload project from Maven/Gradle),否则缓存可能让改动不生效
注意:不要往 Classpath 或 Javadoc path 里硬塞 src.zip —— 它只对源码跳转有效,放错位置毫无作用。
Eclipse 中配置 src.zip 的关键区别
Eclipse 不是统一配 SDK,而是按 JRE 实例逐个绑定,且必须确保你用的是 “Execution Environment” 或 “Standard VM” 类型,不是 “Alternate JRE” 之类模糊配置。
- 打开 Preferences → Java → Installed JREs,选中目标 JRE → 点
Edit… - 在
JRE system libraries列表里,找到rt.jar(JDK 8)或java.base(JDK 9+),双击它 - 在弹出窗口中,填入
Source attachment path:直接输入$JAVA_HOME/src.zip,或点External File…浏览选择 - 如果列表里看不到
rt.jar,说明你添加的是 JRE 而非 JDK —— 必须用完整 JDK 路径(含bin、lib、src.zip)
常见坑:Eclipse 对 JDK 11+ 模块化支持较弱,若你看到 java.base 显示为 “unbound”,说明它没识别出模块结构,此时仍可强制把 src.zip 挂到整个 JRE 上,不影响源码跳转。
为什么有时候绑了 src.zip 还是看不到注释或跳转失败
源码文件存在 ≠ 注释和调试信息可用。JDK 自身构建时是否保留 DEBUG 信息、是否启用 -g 编译参数,直接影响 IDE 能否显示局部变量名、行号甚至部分 Javadoc。
- Oracle JDK 8u202+、OpenJDK 11+ 默认包含完整调试信息,但早期版本(如 JDK 8u60)的
src.zip可能缺失部分内联注释或私有方法文档 - 某些国产 JDK(如毕昇 JDK、龙芯 JDK)会裁剪
src.zip以减小体积,删掉大量@implSpec或@hidden注释,导致跳转后一片空白 - IDE 缓存损坏会导致“已绑定却无效”,可尝试:
File → Invalidate Caches and Restart…→ 勾选Invalidate and Restart - Gradle/Maven 项目若显式依赖了
org.openjdk.jdk:src这类第三方源码包,会覆盖 JDK 自带的src.zip,优先检查External Libraries下是否有冲突项
最常被忽略的一点:JDK 主版本和项目语言级别不一致。比如项目设成 Java 17,但 SDK 指向的是 JDK 11,哪怕 src.zip 绑对了,IDE 也会因语法解析失败而拒绝跳转——务必核对 Project SDK 和 Project language level 是否真正匹配。










