JDK 20的java.xml模块为何导出大量javax前缀类?
Java SE和Jakarta EE是独立体系:你混淆了Java SE(JDK核心)与Jakarta EE(企业级规范)的命名空间迁移规则。
javax转jakarta是Jakarta EE专属的迁移动作——当年Java EE移交Eclipse基金会后,为了和Oracle的JDK划清界限,才把所有原Java EE相关的javax.*包重命名为jakarta.*。但JDK里的java.xml模块包含的是Java SE核心XML处理API,比如javax.xml.parsers、javax.xml.transform这些,从一开始就是Java SE规范的一部分,不属于Jakarta EE范畴,自然不需要迁移。历史边界清晰:早年Java EE确实依赖过JDK里的部分API,但随着Java EE改名为Jakarta EE并独立运营,两者的边界彻底明确了:JDK只维护Java SE规范内的API,哪怕是
javax开头的,只要属于Java SE,就会保留原命名;而Jakarta EE负责企业级API,所有原Java EE的javax.*都已迁移到jakarta.*。实际案例区分:比如JAXB,早期是JDK自带的(JDK 8及以前),但后来被划归Jakarta EE范畴,所以JDK 11之后就从JDK中移除了,现在要用JAXB必须引入
jakarta.xml.bind的第三方依赖;而java.xml模块里的javax.xml.validation这类基础XML验证API,属于Java SE核心功能,至今仍留在JDK中,沿用javax前缀。
内容的提问来源于stack exchange,提问作者KronosOne

