Подтвердить что ты не робот

Jaxrs-api против jsr311-api против javax.ws.rs-api против джерси-ядра

Я немного искалечил Google, но я смущен тем, что каждый из них точно означает.

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

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

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

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

4b9b3361

Ответ 1

Сначала я займусь вопросом

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

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

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

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


  • jaxrs-api - это упаковка RESTeasy. Это не официальная спецификация, но она придерживается специальных контрактов. 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 в эту банку. Только после этого он начал использовать официальные спецификации.

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

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