Различие между javax.persistence, javax.persistence-api и javaee-api - PullRequest
0 голосов
/ 14 марта 2019

Меня смущают различия и содержимое javax.persistence, javax.persistence-api и javaee-api.Javaee-api может содержать намного больше, но меня интересуют только JPA (если они есть в javaee-api).В абстрактной перспективе есть JPA как спецификация и некоторая реализация JPA, такая как eclipselink.Поэтому было бы легко понять, если бы в конфигурации было две зависимости: одна для содержимого спецификации и одна для реализации.Но кажется, что это немного сложнее, поэтому у меня есть следующие вопросы:

  • Я предполагаю, что «javax.persistence-api» содержит такие вещи, как интерфейсы и, следовательно, javax.persistence-apiсодержит декларации программного содержимого JPA без реализации спецификации.Поэтому, если я устанавливаю javax.persistence-api в версии 2.2 как зависимость (maven или gradle), я определяю, что должен использоваться JPA 2.2 (должен поддерживаться реализацией), и если я устанавливаю javax.persistence-api в версии 2.1 как зависимость, я определяючто JPA 2.1 должен использоваться / поддерживаться.Это верно?

  • Какова цель / содержание зависимости "javax.persistence" (можно загрузить, например, в в этом репозитории mvn в версии 2.2.1)?

  • Содержит ли javaee-api в версии 7.0 javax.persistence-api и, если да, то какая версия?2.1?Как или где я могу найти эту информацию?

  • Если я использую новейшую возможную реализацию, такую ​​как EclipseLink 2.7.4 (в первом квартале 2019 года), которая утверждает, что поддерживает JPA 2.2,есть ли обратная совместимость с более старыми версиями JPA, такими как 2.1?

Я был бы очень рад любым разъяснениям.

1 Ответ

0 голосов
/ 14 марта 2019

API-зависимости используются для compile вашего проекта.Реализация может быть либо provided средой выполнения (например, сервером приложений Java EE), либо приложение может быть собрано так, чтобы включать реализацию.Если вы не знакомы с областями maven, я предлагаю вам прочитать this .

  • Вы правы, javax.persistence-api не включает реализацию.
  • этот репозиторий является реализацией eclipselink.ArtifactId изменен в версии 2.3 с "javax.persistence" на "eclipselink".
  • javaee-api включает также JPA.Версия API может быть найдена, например, здесь : " Платформа Java EE 7 требует Java Persistence API 2.1. " Википедия также имеет сравнение версий APIвеб-профиль, который может прояснить ситуацию (веб-профиль является подмножеством спецификации Java EE).
  • Я не знаю о совместимости между версиями JPA 2.1 / 2.2.Я бы всегда использовал одну и ту же версию реализации.

edit: я думаю, вы могли бы запустить приложение JPA 2.1 во время выполнения JPA 2.2.Однако обратная совместимость также должна означать отсутствие поведенческих различий .Новая версия имеет больше функций, и эти функции могут быть включены по умолчанию.В конце концов, Java EE - это «соглашение о конфигурации».Так что это также зависит от вашего определения «обратной совместимости».

...