支持JDK 17的javax.json-api与javax.json适配版本是多少?
JDK17环境下javax.json依赖适配方案
你当前使用的1.1.4版本JSON-P(JSR-374)实现依赖JDK内部未公开API,JDK17默认启用内部API强封装机制,运行时会抛出InaccessibleObjectException,无法正常工作。根据你是否愿意调整代码导入路径,可选择以下两种适配方案:
方案1:保留javax.json包名,不改动现有代码
如果不想修改代码中所有javax.json.*的导入语句,仅需替换实现包版本即可,兼容JDK17的稳定依赖组合如下:
- API包:
javax.json:javax.json-api:1.1.4无需升级,该包仅为接口定义,无JDK内部API依赖,可直接在JDK17上运行 - 实现包:将原有
org.glassfish:javax.json:1.1.4替换为org.glassfish:javax.json:1.1.6,该版本修复了高版本JDK下的内部API访问问题,无需额外添加JVM启动参数即可正常运行
方案2:迁移到Jakarta命名空间(长期维护推荐)
如果需要跟进后续生态更新,建议直接迁移到Jakarta社区官方维护的JSON-P版本,该版本线原生适配JDK17及后续高版本JDK,不存在内部API兼容问题,对应依赖为:
- API包:
jakarta.json:jakarta.json-api:2.0.1 - 实现包:
org.glassfish:jakarta.json:2.0.1
注意:该方案需要将代码中所有
javax.json.*的导入语句替换为jakarta.json.*,两个包下的API签名完全一致,仅包名变更,无需修改业务逻辑代码。
如果你的项目使用了Java模块化配置(存在module-info.java文件),上述两个方案的适配版本都不需要额外添加--add-opens类的JVM启动参数,可直接在JDK17环境下正常运行。
内容的提问来源于stack exchange,提问作者Chiran Chathwara
相关产品推荐
相关产品推荐

