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

使用JDK8编译项目并在JDK17运行,关于移除依赖的疑问

问题解答

核心结论

会出现移除依赖相关的运行时错误,仅用JDK8编译无法让项目在JDK17正常运行,必须显式添加对应的第三方依赖。

原因说明

  • JDK8中jdk.xml.bind(JAXB)、jdk.xml.ws(JAX-WS)是JDK自带的模块,但从JDK9开始这些模块被标记为废弃,JDK17中已完全移除。
  • 编译阶段用JDK8能正常通过,因为编译时JDK提供了这些类;但运行时JDK17的环境里没有这些类的实现,会直接抛出ClassNotFoundException或NoClassDefFoundError。

解决方案

需要在项目的依赖管理中添加以下第三方实现:

  • JAXB依赖:使用GlassFish的JAXB运行时
    <!-- Maven示例 -->
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.8</version> <!-- 选择兼容JDK17的版本 -->
    </dependency>
    
  • JAX-WS依赖:使用JAX-WS RI套件
    <!-- Maven示例 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-ri</artifactId>
        <version>2.3.5</version> <!-- 选择兼容JDK17的版本 -->
        <type>pom</type>
    </dependency>
    

额外注意事项

  • 确保依赖版本与JDK17兼容,避免版本冲突;
  • 如果项目使用模块化(module-info.java),需要在模块声明中添加对这些库的依赖:
    module your.module.name {
        requires jakarta.xml.bind; // 对应JAXB
        requires jakarta.xml.ws.api; // 对应JAX-WS
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:47:34