jaxrs-api vs. jsr311-api vs. javax.ws.rs-api vs. jersey-core vs. jaxrs-ri

j'ai cherché sur Google un peu partout et je ne sais toujours pas exactement ce que signifie chacune des réponses ci-dessus.

Voici ma compréhension de celui-ci:

  • jaxrs-api : contient uniquement l'api. Pas de mise en œuvre. Mais en quoi est-ce différent de JSR311?--8-->
  • jsr311-api: JSR311 il s'agit d'une requête de spécification. Ce qui veut dire que c'est censé être un document. Pourquoi alors est-il un bocal?
  • javax.ws.rs-api: Est-il un la mise en œuvre?
  • maillot-core (/client jersey): est une implémentation de JSR311.

j'ai téléchargé chaque bocal et essayé de le décompiler et de voir ce qu'il contient, mais je ne suis capable de trouver des interfaces dans chacun d'eux et pas l'implémentation.

je suis confronté à ces questions dans le contexte des avertissements dupliqués générés par le plugin maven shade, et j'ai besoin d'une bonne compréhension de ce qui précède pour comprendre lesquels exclure et pourquoi.

23
demandé sur Paul Samsotha 2015-08-20 01:07:21

1 réponses

je vais d'abord passer à la question

"JSR311 c'est une spécification de la demande. Ce qui veut dire que c'est censé être un document. Pourquoi alors est-il un bocal?"

excepté le dernier (jersey-core), tous ces pots sont des pots "spécification". Les spécifications JAX-RS (ainsi que beaucoup D'autres Java) définissent les contrats (ou interfaces) pour lesquels les implémenteurs doivent implémenter le comportement spécifié.

donc en gros toutes les classes spécifiées dans le spécification devrait être dans le pot que les contrats. Les utilisateurs finaux des pots peuvent les utiliser pour les contrats. mais il n'y a pas de mise en œuvre. Vous devez avoir une implémentation réelle pour exécuter l'application, bien que le jar de L'API spec soit suffisant pour compiler une application complète conforme JAX-RS.

par exemple, si nous avons une de ces API jars spec sur classpath, nous pouvons créer une application JAX-RS entière et la compiler, mais pour l'exécuter, si nous n'avons pas la mise en œuvre réelle, nous avons besoin de déployer sur un serveur qui a la mise en œuvre réelle de cette version spec, par exemple JBoss ou Glassfish


  • jaxrs-api -Resteasy's emballage de la spécification. Ce n'est pas le registre officiel, mais il respecte les contrats. RESTeasy utilise ce bocal pour toute la ligne spec, i.e. 1.x - courant. Bien que le pot ne change internes pour adhérer aux différents JAX-RS version.

  • jsr311-api - ceci est le jar officiel pour le JAX-RS 1.x ligne.

  • javax.ws.rs-api - ceci est le bocal officiel pour le JAX-RS 2.x ligne.

  • maillot-core - il s'agit d'une mise en oeuvre partielle du spec. Le reste de l'implémentation est contenu dans d'autres jarres Jersey. Notez que dans les versions précédentes De Jersey, ils empaqueté les API JAX-RS spec dans ce bocal. Ce N'est que plus tard que Jersey a commencé à utiliser les bocaux officiels.

  • jaxrs-ri - C'est le maillot 2 complet.x Mise en œuvre emballée dans un seul pot. Le "ri" signifie mise en oeuvre de la référence, qui est ce que Jersey est: l'implémentation de référence JAX-RS. Si vous n'utilisez pas un gestionnaire de dépendances comme Maven, vous pouvez utiliser ce seul bocal au lieu d'avoir à utiliser tous les les pots séparés que Jersey vient avec.

Autres Ressources

notez aussi que bien que différentes implémentations adhèrent aux spécifications, chaque implémentation a son propre ensemble de fonctionnalités supplémentaires. Pour en savoir plus, vous devriez passer en revue la documentation des différentes implémentations. Les trois plus populaire implémentations sont Jersey, RESTeasy et CXF

35
répondu Paul Samsotha 2018-09-30 23:01:45