我先回答问题
“JSR311是一个规范请求。这意味着它应该是一个文档。为什么它是一个jar?”
除了最后一个(
jersey-core
),所有这些罐子都是“规格”罐子。JAX-RS(以及许多其他Java)规范定义了实现者应该为其实现指定行为的契约(或接口)。
因此,基本上规范中指定的所有类都应该作为契约放在jar中。jar的最终用户可以将它们用于合同。但没有实现。您需要有一个实际的实现来运行应用程序,尽管规范API jar足以
编写
一个完全符合JAX-RS的应用程序。
例如,如果类路径上有一个规范API jar,我们可以编写一个完整的JAX-RS应用程序并编译它,但是为了运行它,如果我们没有实际的实现,我们需要部署到一个具有该规范版本的实际实现的服务器,例如JBoss或Glassfish
-
jaxrs api
-这是
RESTeasy's
规范的包装它不是官方的规范罐,但它确实遵守规范合同。RESTeasy将这个jar用于整个规范行,即1.x-current。尽管jar确实改变了内部结构,以符合不同的JAX-RS版本。
-
jsr311 api
-这是JAX-RS1.x行的官方规范jar。
-
javax.ws.rs-api
-这是JAX-RS2.x行的官方规范jar。
-
球衣核心
-这是该规范的部分实现。其余实现包含在其他Jersey jar中。注意,在Jersey的早期版本中,他们实际上将JAX-RS规范API打包到这个jar中。直到后来,Jersey才开始使用官方规格的罐子。
-
jaxrs ri
-这是打包到一个jar中的完整Jersey 2.x实现。“ri”的意思是
参考实施方式
,这就是Jersey:JAX-RS参考实现。如果您没有使用Maven这样的依赖关系管理器,您可能只需要使用这个jar,而不必使用Jersey附带的所有单独的jar。
其他资源
还要注意,尽管不同的实现遵循规范,但每个实现都有自己的一组额外特性。要了解更多信息,您应该阅读不同实现的文档。最流行的三种实现是
Jersey
,
RESTeasy
和
CXF