java - 将 JAXB 声明为依赖项。为什么?

标签 java maven jaxb jersey

为什么要将 JAXB 声明为 Java 应用程序的依赖项,因为它无论如何都随 JRE 一起提供并且不能在您的应用程序类路径中被覆盖?

使用 jersey-json例如,在他们的 POM 文件中,他们声明了对 jaxb-impl 的依赖,甚至没有指定确切的版本。他们这样做有什么好处?

而且,当我向 jersey-json 添加依赖项时在我自己的 POM 文件中,我最终在类路径中包含了 jaxb-api.jar 和 jaxb-impl.jar。我为什么要发生这种情况?如果我不将文件放入认可的库目录中,默认的 JVM 实现是否会被加载?

最佳答案

我在链接的 pom 中看到:

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
    </dependency>

但是还有一个父 pom,因此您可能想要跟踪该线索,以查看是否在那里指定了实际版本和/或范围(并向下传播)。

但如果不是,那么我猜 Jersey 团队认为 JAXB 2 API 已经足够成熟,允许他们指定对 JAXB 实现的松散依赖。

JRE 附带 JAXB impl 的特定实现,在最长的时间里相当于 JAXB RI 2.1.7。但与此同时,有一种机制可以在您的应用中轻松换出您选择的另一种实现方式。

当然,您可以使用内置的 JRE JAXB 实现,如果它适用于您的应用程序,您当然应该尝试一下。

尽管如此,一些可能导致您想要单独的 JAXB 实现的原因包括:遗留错误(在较新的版本中解决);需要更新的 JAXB API,例如 JAXB 2.2.x(它出现在更新版本的 JRE 中);想要完全使用不同的实现(因为它恰好有更好的 API 和/或性能适合您的特定用途),等等...

那么回到您的 Jersey 问题,我再次猜测他们希望为开发人员提供灵 active 以引入他们选择的 JAXB 实现。我认为他们在指南中的某处有一定程度的建议。 但是,JAXB RI 被明确标记为依赖项这一事实削弱了论点。

关于java - 将 JAXB 声明为依赖项。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11228688/

相关文章:

java - 数据类型 datetime 和 time 在大于或等于运算符中不兼容

java - 在 JPanel 中获得良好的网格布局

java - gradle 传递依赖下载本地 ivy

java - xs :String in xs:DateTime format to XMLGregorianCalendar

JAXB schemagen 如何为两个字段生成选择?

java - 创建新实例 SQLITE 时出现错误

java - 为什么此 Java 代码会生成错误?

java - Jersey : com. sun.jersey.spi.inject.Errors$ErrorMessagesException

java - Spring session jdbc

spring - 如何在 Controller 中使用 JAXB 和 Spring @ResponseBody 生成正确的站点地图命名空间?