Как создать пакет Maven с использованием JPA, но не зависит от поставщика услуг;и позже, как подключить моего поставщика услуг пользователем этого пакета? - PullRequest
2 голосов
/ 12 января 2011

Я не уверен, возможно ли это вообще ...

У меня есть несколько шаблонов проектирования, которые я хочу в своем специальном пакете Maven (# 1) - все эти шаблоны используют javax.persistence.Я не хочу, чтобы этот пакет зависел от Hibernate или любой другой реализации JPA.Просто позвольте этому зависеть от API JPA, как это определено JCP.Мой второй пакет Maven (# 2) должен использовать этот первый и указать, какую реализацию JPA использовать (например, Hibernate).

Теперь, как мне определить мой pom.xml для обоих этих пакетов (позволить реализации JPA для пакета # 2 быть Hibernate)?

Ответы [ 2 ]

3 голосов
/ 12 января 2011

JPA определяет пакет javax.persistence, он содержит аннотации, интерфейсы и так далее. Этот пакет полностью независим от поставщика. Он должен содержать все, что вам нужно для реализации независимых от поставщика услуг на основе JPA.

Единственное, что вам нужно, это поместить зависимость в javax.persistence, содержащий артефакт maven, в вашем модуле Maven # 1.

Существует несколько артефактов maven, содержащих этот пакет javax.persistence. Например:

<dependency>
  <!-- JPA 1.0 -->
  <groupId>javax.persistence</groupId>
  <artifactId>persistence-api</artifactId>
  <version>1.0</version>
</dependency>


<dependency>
  <!-- JPA 2.0 -->
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>javax.persistence</artifactId>
  <version>2.0.0</version>
</dependency>

В вашем модуле Maven # 2 вам нужно поместить зависимость от модуля # 1 и зависимость от поставщика JPA (например, Hibernate), который вы хотите использовать. (Если поставщик, которого вы используете, использует другую зависимость от пакета javax.persistence, то вам необходимо исключить одну из них.)

1 голос
/ 12 января 2011

Предполагая, что вы не хотите, чтобы Hibernate находился в пути компиляции (чтобы разработчики не могли использовать специфичные для поставщика расширения), но вы все равно хотите, чтобы он был упакован в финальный артефакт, вы должны использовать <scope>runtime</scope> при определенииваша реализация JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...