Где я могу найти зависимость JPA2 Maven? - PullRequest
31 голосов
/ 27 июля 2011

Я пытаюсь создать независимый от реализации модуль maven, который опирается на JPA2.К сожалению, единственная зависимость Maven JPA основана на JPA1, и, следовательно, я не могу использовать метод EntityManager.detach (), поскольку это только опция JPA2.

В идеале, я бы хотел иметь возможность указать свой javaxЗависимость .persistence в моем Pom, и требовать, чтобы приложение / контейнер предоставило реализацию JPA2.К сожалению, я не могу найти такую ​​зависимость.

Является ли мой единственный выбор на данный момент объявить hibernate-jpa-2.0-api 1.0.0.FINAL в качестве предоставленной зависимости?

Ответы [ 7 ]

44 голосов
/ 01 августа 2014

Я знаю, что это довольно старая статья, если вы хотите отойти от реализации, вам следует вместо этого использовать зависимость Java EE API.

Просто добавьте в POM:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>${jee.version}</version>
    <scope>provided</scope>
</dependency>

Где $ {jee.version} - желаемая версия Java EE.Я в настоящее время использую 7.0.Он имеет все зависимости EJB, JPA и JSF API.

38 голосов
/ 29 августа 2011

Hibernate JPA 2 класса (javax.persistence ...) здесь:

<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.1.Final</version>
</dependency>
10 голосов
/ 27 июля 2011

Я использую артефакт 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&amp;nf=1&amp;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.

4 голосов
/ 03 февраля 2013

Это наиболее актуальный и официальный API для JPA2 от EclipseLink:

<repositories>
    <repository>
        <url>http://download.eclipse.org/rt/eclipselink/maven.repo/</url>
        <id>eclipselink</id>
        <layout>default</layout>
        <name>Repository for library EclipseLink (JPA 2.0)</name>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>javax.persistence</artifactId>
        <version>2.0.3</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

В отличие от Hibernates API, они взяты из официальной спецификации и поддерживают улучшенные дженерики, когда дело касается использования Criteria API.

3 голосов
/ 21 октября 2017

Для API JPA 2.2 «официальный» артефакт доступен в maven central, см. этот ответ .

0 голосов
/ 27 декабря 2016

Мне удалось решить проблему с зависимостью Maven JPA2, добавив пару зависимостей в файл проекта pom.xml. Ниже приведен код xml для зависимостей.
Я нашел последние версии groupId и artifactId, развернув каталоги в Maven Central . Я просто прошел по дереву каталогов, пока не нашел файлы metadata.xml для persistence.core и persistence.jpa артефактов.
Примечание : зависимость от persistence.jpa - это то, что на самом деле приносит javax.persistence jar .

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.1.Final</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.core</artifactId>
        <version>2.6.4</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa</artifactId>
        <version>2.6.4</version>
        <scope>compile</scope>
    </dependency>
0 голосов
/ 11 августа 2015

На сегодняшний день, я думаю, наиболее актуальным является:

<dependency>                                          
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>    
    <version>1.0.0.Final</version>                    
</dependency>

Вот как вы можете использовать JPA в Maven:

<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.2</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.10.Final</version>
    <scope>runtime</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
        </exclusion>
        <exclusion>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...