代码之家  ›  专栏  ›  技术社区  ›  Gadam

jaxrs api VS jsr311 api VS javax.ws。rs api VS jersey核心VS jaxrs ri

  •  38
  • Gadam  · 技术社区  · 9 年前

    我在谷歌上搜索了很多遍,但我仍然对以上每一条的确切含义感到困惑。

    以下是我对它的理解:

    • jaxrs api :仅包含api。没有实施。但它与JSR311有何不同
    • jsr311 api :JSR311这是一个规范请求。这意味着它应该是一份文件。那为什么是一个罐子?
    • javax.ws.rs-api :它是一个实现吗?
    • 球衣核心 (/jerse-client):是JSR311的一个实现。

    我下载了每个jar并尝试反编译,看看里面有什么,但我只能在所有jar中找到接口,而不能找到实现。

    我在maven shade插件生成的重复警告的背景下面临这些问题,需要正确理解以上内容,以确定排除哪些警告以及原因。

    1 回复  |  直到 6 年前
        1
  •  62
  •   Paul Samsotha    6 年前

    我先回答问题

    “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