You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 17中rt.jar缺失,求替代Jar及JAXBContextImpl.class解决方案

Java 17 中 rt.jar 替代及 JAXB 相关问题解决方案

1. Java 17 可替代 rt.jar 的 Jar 包

Java 9 开始采用模块化架构,rt.jar 被拆分为多个核心模块对应的模块化文件,不存在单一替代 Jar,按需处理即可:

  • 基础核心类(如 java.lang、java.util 下的类):Java 17 环境默认包含这些核心模块,无需额外引入依赖。
  • 原 rt.jar 中被移除的非核心 API(如 JAXB、JAX-WS):需单独引入对应 Jakarta EE 迁移版或第三方实现依赖,以 Maven 为例:
<!-- JAXB API 及实现 -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>4.0.4</version>
    <scope>runtime</scope>
</dependency>
  • 原 rt.jar 中的非标准 com.sun 开头工具类:优先替换为 Java 标准 API(如 sun.misc.BASE64Encoder 替换为 java.util.Base64),若必须保留,可查找第三方维护的对应 Jar。

2. JAXBContextImpl.class 的获取途径

JAXBContextImpl 是原 Oracle JDK 中 JAXB 的私有实现类,Java 17 已移除,获取方式:

  • 引入上述 com.sun.xml.bind:jaxb-impl 依赖,该 Jar 中包含 com.sun.xml.bind.v2.runtime.JAXBContextImpl 类,引入后可在运行时访问。
  • 注意:直接依赖该类属于耦合具体实现,不推荐,建议面向 JAXB 标准 API 编程。

3. JAXBContextImpl.class 的替代类

无需直接依赖 JAXBContextImpl,推荐以下替代方案:

  • 标准 API 编程:通过 JAXBContext.newInstance() 静态方法获取实例,该方法会自动加载类路径中的 JAXB 实现,无需指定具体实现类:
JAXBContext context = JAXBContext.newInstance(YourEntityClass.class);
  • Jakarta 官方实现:使用 org.glassfish.jaxb:jaxb-runtime 依赖中的 org.glassfish.jaxb.runtime.v2.JAXBContextImpl,但同样建议面向 API 而非具体实现。
  • 第三方实现:如 EclipseLink MOXy,引入依赖后,JAXBContext.newInstance() 会自动使用其实现,代码无需修改:
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.moxy</artifactId>
    <version>4.0.2</version>
</dependency>

内容的提问来源于stack exchange,提问作者Rakesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:12:38