JSR是Java标准化提案编号,非API或依赖包;它由JCP组织协调制定,描述规范而非提供实现,实际使用需依赖对应参考实现,且现代Java开发中已逐步被Jakarta EE等新流程取代。

JSR 不是 Java 版本,也不是你项目里要加的依赖;它是标准化提案的编号,背后是 JCP 这个松散组织在协调各方意见。
JSR 是什么:别把它当成 API 或 jar 包
看到 JSR-303、JSR-356 这类编号,别急着去 Maven 仓库搜——它只是提案序号,不是实现。真正要用的是对应规范的参考实现(RI)或兼容实现(如 hibernate-validator 实现 JSR-303,Tomcat 实现 JSR-356)。
- JSR 文档本身是 PDF/HTML 规范,描述“应该做什么”,不提供代码
- Java SE/EE 的核心功能(如
java.time)往往源自 JSR(JSR-310),但最终以标准类库形式落地,和 JSR 编号不再直接绑定 - JDK 9+ 引入模块系统后,部分 JSR 内容被吸收到
java.base等模块中,更看不到 JSR 字样
JCP 是谁在管事:没有强制力的投票机制
JCP(Java Community Process)是制定 JSR 的流程框架,成员包括厂商(Oracle、IBM、Red Hat)、开源项目(Eclipse Foundation)、个人。但它不发号施令,只提供提案、评审、投票路径。
- 一个 JSR 要成为正式规范,需通过
Expert Group草拟、Public Review征集反馈、最终Executive Committee投票——但投票结果不具法律约束力 - Oracle 作为 Specification Lead 时有较大话语权,但无法单方面决定(例如
JSR-371(MVC 1.0)因争议大,最终未被主流容器采纳) - 很多 JSR 后来被放弃或搁置(如
JSR-372(Portlet 3.0)长期停滞),别默认“有 JSR 就等于有落地”
怎么查一个 JSR 是否还有效:别信过期的博客
JSR 页面托管在 jcp.org,但网站老旧、搜索难用。最可靠方式是查 JDK 发行说明或 OpenJDK 源码提交记录。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 访问
https://www.php.cn/link/1bd7d4eac464cde6f86349cbe0d61385/en/jsr/detail?id=XXX(把 XXX 替成编号),看 Status 是否为Final或Withdrawn - JDK 17 的
java.net.http来自JSR-321,但该 JSR 页面标为Active,实际已归档——得看 JDK 版本发布页的 “New Features” 栏目才准确 - 用
javap -v查某个类的Signature属性,有时能看到引用的 JSR 编号(极少数情况)
为什么现在很少提 JSR 了:标准化重心转移了
从 Java EE 移交 Eclipse 基金会(改名 Jakarta EE)开始,JSR 体系事实上被弱化。新规范走 Eclipse Foundation 的 Specification Project 流程,编号也变成 Eclipse Jakarta EE Specification X.Y。
- Java SE 仍沿用 JSR 编号(如
JSR-383对应 JDK 17 的Sealed Classes),但 Oracle 在 JDK 更新日志里基本不提 JSR 号 - Spring、Quarkus 等框架更多直接实现 Jakarta EE 规范(如
jakarta.ws.rs),而非追溯原始 JSR - 如果你在维护老项目,看到
javax.*包,那大概率对应某个已迁移的 JSR(如JSR-330→jakarta.inject),替换时注意包名和行为差异
真正卡住人的,从来不是 JSR 编号本身,而是搞不清「这个注解是哪个规范定义的」「为什么同样的接口在不同 JDK 版本里行为不一致」——这时候翻 JSR PDF 不如直接查对应 JDK 的 Javadoc 和 release notes。

















