这是我对此的理解:
> jaxrs-api:只包含api.没有实现.但是它与JSR311有什么不同
> jsr311-api:JSR311它是一个规范请求.这意味着它应该是一个文件.为什么这是罐子?
> javax.ws.rs-api:是否是一个实现?
jersey-core(/泽西客户端):是JSR311的一个实现.
我下载了每个jar,并尝试反编译,看看它里面是什么,但是我只能找到所有的接口,而不是实现.
我在maven shade插件生成的重复警告的上下文中面临这些问题,需要对上述内容进行正确的理解,以确定要排除哪些错误以及为什么.
解决方法
“JSR311 it is a specification request. Which means it is supposed to be a document. Why then is it a jar?”
除了最后一个(运动衫),所有这些罐子都是“规格”的罐子. JAX-RS(以及许多其他Java)规范定义了实现者应实现指定行为的合同(或接口).
所以基本上规范中指定的所有类都应该在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-RS 1.x行的官方规范jar.
> javax.ws.rs-api – 这是JAX-RS 2.x行的官方规范jar.
>泽西核心 – 这是规范的部分实现.实施的其余部分包含在其他泽西罐内.请注意,在Jersey的早期版本中,他们实际上将JAX-RS规范API打包到此jar中.直到后来才开始使用官方规格的罐子.
其他资源
> Java API for RESTful Services (JAX-RS)阅读不同规格版本的详细信息.
> Complete implementation for RESTeasy distribution.如果JAX-RS 2.x实现的RESTeasy 3.x行,以及JAX-RS 1.x行的RESTeast 2.x / 1.x id
> Complete distribution of Jersey implementation.您可以在页面顶部的“泽西JAX-RS 2.0 RI软件包”链接中找到JAX-RS 2.x实现.还有底部链接到泽西1.x线分布,它遵守JAX-RS 1.x规范.
另请注意,虽然不同的实现遵守规范,但每个实现都有自己的一组额外功能.要了解更多信息,您应该了解不同实现的文档.三个最流行的实现是Jersey,RESTeasy和CXF