为什么要将 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/