я сначала получить на вопрос
«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 в эту банку. Только после этого он начал использовать официальные банеры.
Другие ресурсы
Также обратите внимание, что хотя различные реализации соответствуют спецификации, каждая реализация имеет свой собственный набор дополнительных функций. Чтобы узнать больше, вы должны ознакомиться с документацией о различных реализациях. Три самые популярные версии: Jersey, RESTeasy, и CXF
Спасибо за ответ. Таким образом, 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
Это в значительной степени суть этого. И да, это перекрывающиеся классы. 2.x действительно просто добавляет к 1.x. Я не могу придумать ничего с моей головы, которое было удалено в 2.x. –
Я имею в виду, что это действительно зависит от ваших потребностей. Я лично предпочитаю использовать строку 2.x, просто потому, что я использую Jersey 2, у которого есть множество функций, но если вы хотите сравнить только стандартный API, у 2.x есть фильтры и перехватчики, поддержка async, проверка бонусов, и, вероятно, больше вещей, о которых я не могу сейчас думать –