Я использую артефакт javax.persistence
(а не eclipselink
) из репозитория EclipseLink Maven для доступа к классам API JPA 2. Отрывки из ПОМ включают в себя:
<project>
...
<dependencies>
...
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
...
<repositories>
...
<repository>
<id>EclipseLink Repo</id>
<!-- note that ampersands in this URL are escaped because this is in an
xml file - un-escape them to use in browser -->
<url>http://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/rt/eclipselink/maven.repo</url>
</repository>
...
</repositories>
...
</project>
Артефакт javax.persistence
содержит все классы API и ни один из классов EclipseLink (кроме двух), что позволяет указывать область действия, как указано; это относится даже к провайдеру EclipseLink JPA (указанному в eclipselink
Id артефакта).
Я не смешивал артефакт javax.persistence
с артефактом hibernate-entitymanager
, как я управлял зависимостью для другого проекта, использующего Hibernate EntityManager вместо EclipseLink для поставщика JPA. Фрагмент из POM второго проекта показан ниже:
<project>
<dependencies>
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.5.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
<scope>provided</scope>
</dependency>
</dependencies>
...
</project>
Я изменяю области зависимостей с provided
на test
в других проектах, чтобы гарантировать, что в модульных тестах будет поставщик JPA в пути к классам. Это в первую очередь делается для того, чтобы скрыть побочные эффекты использования javaee-api
зависимости , которую я использую в родительском POM, чтобы разрешить компиляцию ссылок времени на несколько классов API Java EE 6.