2015-08-19 5 views
17

У меня есть довольно много проблем, но я все же смущен, что означает каждое из указанных выше.jaxrs-api vs. jsr311-api vs. javax.ws.rs-api vs. jersey-core

Вот мое понимание этого:

  • jaxrs-API: содержит только API. Никакой реализации. Но как это отличается от JSR311
  • jsr311-api: JSR311 это запрос спецификации. Это означает, что он должен быть документом. Почему же это банка?
  • javax.ws.rs-api: Это реализация?
  • jersey-core (/ jersey client): Является реализацией JSR311.

Я загрузил каждую банку и попытался декомпилировать и посмотреть, что внутри нее, но я могу только найти интерфейсы во всех них, а не в реализации.

Я столкнулся с этими вопросами в контексте повторяющихся предупреждений, генерируемых плагином maven shade, и вам нужно правильно понять вышеизложенное, чтобы выяснить, какие из них следует исключить и почему.

ответ

29

я сначала получить на вопрос

«JSR311 это запрос спецификации. Это означает, что должно быть документом. Почему же тогда это банка?»

За исключением последних (jersey-core), все эти банки являются «спецификационными» флягами. Спецификации JAX-RS (а также многие другие Java) определяют контракты (или интерфейсы), которые реализаторы должны реализовать для указанного поведения.

Таким образом, в основном все классы, указанные в спецификации, должны быть в банке в виде контрактов. Конечные пользователи банки могут использовать их для контрактов. но реализации нет. Для запуска приложения требуется фактическая реализация, хотя для спецификации API-интерфейса достаточно компилировать полное приложение, совместимое с JAX-RS.

Например, если у нас есть один из этих API-интерфейсов API-интерфейса, мы можем создать приложение JAX-RS и скомпилировать его, но для его запуска, если у нас нет реальной реализации, нам нужно развернуть на сервере, который имеет фактическую реализацию этой спецификации версии, например, JBoss или Glassfish


  • jaxrs-API - Это RESTeasy's упаковка спецификации. Это не официальная спецификация, но она придерживается специальных контрактов. RESTeasy использует эту банку для всей спецификации, т. Е. 1.x - current. Несмотря на то, что банка меняет внутренние элементы, чтобы придерживаться разных версий JAX-RS.

  • jsr311-api - Это официальная спецификация для JAX-RS 1.x.

  • javax.ws.rs-api - Это официальная спецификация для JAX-RS 2.x.

  • jersey-core - Это частичная реализация спецификации. Остальная часть реализации содержится внутри других банок Джерси. Обратите внимание, что в более ранних версиях Джерси они фактически упаковали JAX-RS спецификации API в эту банку. Только после этого он начал использовать официальные банеры.

Другие ресурсы

  • Java API for RESTful Services (JAX-RS) прочитать подробную информацию о различных версиях спецификации.
  • Complete implementation for RESTeasy distribution. RESTeasy 3.x, если реализация JAX-RS 2.x и RESTeast 2.x/1.x для линии JAX-RS 1.x
  • Complete distribution of Jersey implementation. Вы можете найти реализацию JAX-RS 2.x в «Джерси JAX-RS 2.0 RI bundle» в верхней части страницы. Также в нижних ссылках на дистрибутив Джерси 1.x, который придерживается спецификации JAX-RS 1.x.

Также обратите внимание, что хотя различные реализации соответствуют спецификации, каждая реализация имеет свой собственный набор дополнительных функций. Чтобы узнать больше, вы должны ознакомиться с документацией о различных реализациях. Три самые популярные версии: Jersey, RESTeasy, и CXF

+0

Спасибо за ответ. Таким образом, JSR311 - это «запрос на перевод»; его соответствующий «API спецификации» - jsr311-api; И они, и они образуют линию JAX-RS 1.x. Теперь JSR339 является следующим «Запросом спецификации»; его «API спецификации» - «javax.ws.rs-api», и они образуют линию JAX-RS 2.x. Я прав? Если да, существует ли перекрытие между линиями JAX-RS 1.x и JAX-RS 2.x? Могут ли они дать предупреждение о запрете класса maven для дублирования, если они используются вместе? Из jsr311-api, javax.ws.rs-api и jaxrs-api есть лучший способ использовать? – Gadam

+0

Это в значительной степени суть этого. И да, это перекрывающиеся классы. 2.x действительно просто добавляет к 1.x. Я не могу придумать ничего с моей головы, которое было удалено в 2.x. –

+0

Я имею в виду, что это действительно зависит от ваших потребностей. Я лично предпочитаю использовать строку 2.x, просто потому, что я использую Jersey 2, у которого есть множество функций, но если вы хотите сравнить только стандартный API, у 2.x есть фильтры и перехватчики, поддержка async, проверка бонусов, и, вероятно, больше вещей, о которых я не могу сейчас думать –

 Смежные вопросы

  • Нет связанных вопросов^_^