微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JDK15 上的 JAXB:需要哪些 jars?

如何解决JDK15 上的 JAXB:需要哪些 jars?

我使用 JDK15 在 intelliJIDEA 中工作,没有任何 Gradle、Maven 或其他。
是的,我们都知道 JAXB 从 JDK11 开始从 JDK 中移除。
所以我尝试简单地将一些库作为 jar 文件添加到项目中:

    jaxb-runtime-3.0.0
    jaxb-impl-3.0.0
    jaxb-core-3.0.0
    jaxb-api-2.4.0-b180830.03592
    xmlbeans-2.6.02
    activation-1.0.22

不过,我得到的是:

    javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.

在这一行:

    jaxbContext = JAXBContext.newInstance(Hamster.class);

有什么线索吗?

解决方法

您混淆了不兼容的库版本:jaxb-impl-3.0.0.jarjaxb-runtime-3.0.0.jar 都不是 JAXB API 2.4.0 的实现。 Java EE 8 规范(如 JAXB 2.4.0)和 Jakarta EE 9 规范(如 JAXB 3.0)之间发生了重大变化:基本上包命名空间 javax. 已替换为 jakarta.*

因此,为了使用 JAXB 3.0,您需要:

  • 来自 com.sun.xml.bind 及其依赖项的 jaxb-impl-3.0.0.jar 或来自 org.glassfish.jaxb 及其依赖项的 jaxb-runtime-3.0.0.jar。前者依赖较少(许多次要依赖被压缩为 jaxb-core-3.0.0.jar;你不应该将它与 same nameorg.glassfish.jaxb 工件误认为),
  • 将代码中的所有 javax.xml.bind 替换为 jakarta.xml.bind

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。