为什么不同组织的javax.annotation不同

时间:2015-10-31 03:14:16

标签: java jetty guava

我在我的java项目中使用guava和jetty,而我发现了一个奇怪的问题。 在guava中,它依赖于javax.annotation有这么多类,而在jetty中javax.annotation比guava少。它们之间有什么区别。

更重要的是,jetty中的javax.annotation是签名的,而在guava中没有签名。当jvm从guava.jar和jetty.jar中的包javax.annotation加载类时,它抛出SecurityException,导致一个包被签名而其他包没有签名。

那么,guava.jar和jetty.jar之间的javax.annotation包的真正区别是什么。

番石榴包装: no sign and has lot of class

码头包裹: signed and has little class

1 个答案:

答案 0 :(得分:2)

有不同的库在javax.annotations包中提供类型。 Guava正在使用的是来自(现已放弃)JSR-305 proposal的JAR。在Maven中,这是com.google.code.findbugs:jsr305:1.3.9

另一个JAR似乎是org.eclipse.jetty.orbit:javax.annotation:1.1.0.v201108011116。目前尚不清楚JAR的来源,它似乎已于2011年上传,之后从未更新过。

这两个JAR之间的冲突似乎是a well-known one

似乎"依赖"在Guava release 13中添加了这个JAR,但该版本的发行说明说:

  

使用findbugs 2.0时,为findbugs提供了依赖以避免dep冲突。这种变化的副作用是依靠Guava授予访问JSR-305注释的项目#34;免费"除非他们提供他们自己的直接依赖于那个jar(或等价物),否则会破坏。项目应始终直接取决于JSR-305(每个maven最佳实践),但这种变化使得这应该成为必须。

因此,根据我的理解,Guava实际上并没有依赖com.google.code.findbugs:jsr305:1.3.9 JAR。因此,您应该可以自由地排除该依赖项并提供您自己使用的javax.annotations JAR。或者,如果您更喜欢com.google.code.findbugs:jsr305 JAR,则应从构建中排除org.eclipse.jetty.orbit:javax.annotation依赖项。您可以参考Maven documentation了解如何排除不需要的依赖项。