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

编译为Java 8的JAXB依赖应用能否直接在OpenJDK 11运行?

问题解答

可以不用全面迁移至Java 11编译,通过补充缺失的依赖即可让Java 8编译的应用在OpenJDK 11上正常运行,无需切换到Jakarta EE。

问题根源

Java 8中JAXB(javax.xml.bind相关类)是JDK内置组件,但从Java 9开始,JDK采用模块化架构将JAXB移至可选模块,到Java 11时直接移除了该模块。你遇到的NoSuchMethodError正是因为运行时找不到原本JDK自带的JAXB相关方法。

解决步骤

只需在项目中添加JAXB 2.3的官方依赖(保持javax包路径,无需替换为Jakarta),让应用运行时从外部依赖加载JAXB组件:

  • 核心API依赖:javax.xml.bind:jaxb-api:2.3.1
  • JAXB运行时实现:com.sun.xml.bind:jaxb-impl:2.3.3
  • JAXB核心工具类:com.sun.xml.bind:jaxb-core:2.3.0.1
  • 激活框架依赖(Java 9+同样移除了该组件):javax.activation:activation:1.1.1

以Maven为例,在pom.xml中添加:

<dependencies>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.3</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0.1</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>

添加这些依赖后,Java 8编译的字节码可直接在OpenJDK 11上运行,完全依赖JDK的向后兼容性,无需修改现有代码或升级编译版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:02:07