为什么要将JAXB声明为Java应用程序的依赖项,因为它随JRE一起提供并且无法在应用程序类路径中覆盖?
以jersey-json为例,在他们的POM文件中,他们声明了对jaxb-impl的依赖,而没有指定确切的版本。他们通过这样做获得了什么?
而且,当我在我自己的POM文件中向jersey-json添加依赖项时,我最终在我的类路径中使用了jaxb-api.jar和jaxb-impl.jar。我为什么要这样呢?如果我不将文件放到endorsed libraries目录中,是不是默认的JVM实现被加载?
答案 0 :(得分:1)
我在链接的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和/或特定用途的性能),等等......
回到你的球衣问题,我再次猜测他们想让开发人员灵活地选择他们的JAXB impl。我认为他们在导游的某处有一些建议。 但是,JAXB RI被特别标记为依赖关系,这一事实削弱了这一论点。
答案 1 :(得分:0)
这种声音就像球衣的人们认为他们的依赖性错了。如果您运行的环境提供依赖关系,则应使用“提供”范围定义依赖关系。