首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jaxb和jaxb运行时有什么区别?

jaxb和jaxb运行时有什么区别?
EN

Stack Overflow用户
提问于 2022-02-12 21:12:30
回答 1查看 5.6K关注 0票数 11

显然,maven存储库中的com.sun.xml.bind: JAXB -impl工件被标记为"Old JAXB运行时模块“(请参阅下面的链接),但是这两个构件仍然在获得新的版本:

https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl

这个答案在Maven项目中,我应该为JAXB使用哪些工件?并没有澄清不同之处。

对于上述问题和这个如何解决java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException问题,公认的答案是,对于9+,您应该使用:org.Glassfish.jaxb:jaxb-9+-运行时。

但是我有使用com.sun.xml.bind:jaxb的代码,而且它似乎运行良好。那么,如果迁移到jaxb运行时,我会损失什么或得到什么呢?

即使是最新版本(在我编写此版本时为3.0.2),也可用于“旧”jaxb-impl模块。如果Oracle不再这样做,那么是谁制造com.sun.xml.bind:jaxb-impl工件呢?它是用来做什么的?为什么它不与jaxb运行时共享Maven组坐标?

是否有任何中心位置可以清楚地记录JAXB的当前状态?

现在JAXB有很多混乱之处。

我暂时需要与Java 8保持兼容,所以我现在还不能使用3.x,而2.4.x似乎是一种放弃的尝试,试图修复它们在将其从JDK中分离出来时愚蠢地破坏的模块化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-07 10:47:30

jaxb-impljaxb-runtime之间唯一的区别是打包: jar中的jaxb-impl包栈/txw2 2,而jaxb-runtime通过单独的依赖关系提供它们。

版本兼容性与JakartaEE迁移

在最后一天,我一直在努力弄明白这件事,而且令人难以置信的困惑。特别是当您试图避免java.xml.bindjakarta.xml.bind迁移时。在jaxb-impl 2.3.x发行版中到处都是过时的信息和一些坏版本。

据我所知,GlassFish提供了JAXB参考实现。它已经移到了EE4J,但是该项目的发布仍然针对这两组坐标。com.sun.xml.bind:jaxb-ri似乎是最新发布完整包的地方:

https://github.com/eclipse-ee4j/jaxb-ri/

在了解了这段历史之后,真正的混乱之处在于,没有一个工件在它们的工件坐标中反映javax.xml.bindjakarta.xml.bind的移动,只反映在版本中。这意味着如果你生活在生态系统中,你需要两者都存在,那么你就会有一个糟糕的时期。

例如,2.3.3版本从依赖javax.xml.bind:jaxb-api更改为jakarta.xml.bind:jakarta.xml.bind-api,因为在2.x时,jakarta工件提供javax.xml.bind包。在3.0.0版本中,它提供了jakarta.xml.bind

实现在3.0.0时相同,这意味着虽然早期版本可以在运行时愉快地存在,但您无法同时在构建工具中解决它们,冲突解决将打破javax.xml.bind API的遗留使用。

允许javax.xml.bind和jakarta.xml.bind共存

对于需要两种API共存而不需要迁移遗留代码的项目:

  • 对于javax.xml.bind,使用com.sun.xml.bind:jaxb-impl:2.3.6。忽略3.0.0和更高版本。在javax.xml.bind:jaxb-api:2.3.1上添加显式依赖项,以便有一个提供javax.xml.bind API的包
  • 对于jakarta.xml.bind,使用最新的org.glassfish.jaxb:jaxb-runtime。忽略3.0.0之前的版本

运行时与jakarta.xml.bind的兼容性

使用tomcat-jakartaee-迁移工具重写类,以便在构建时或部署时使用新的API。如果您使用Gradle,您可以在工件变换中使用这个。

迁移到jakarta.xml.bind

您可以根据打包的首选项使用运行时的任一坐标:

  • com.sun.xml.bind:jaxb-impl:4.0.0
  • org.glassfish.jaxb:jaxb-runtime:4.0.0

两者都依赖于带有jakarta.xml.bind:jakarta.xml.bind-api包命名空间的jakarta.xml.bind

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71095913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档