我在哪里可以找到JPA2 Maven依赖?

时间:2011-07-26 21:21:37

标签: maven dependencies jpa-2.0

我正在尝试构建一个依赖于JPA2的实现不可知的maven模块。不幸的是,唯一的Maven JPA依赖项是基于JPA1的,因此,我不能使用EntityManager.detach()方法,因为它只是JPA2选项。

理想情况下,我希望能够在我的Pom中指定我的javax.persistence依赖项,并要求app / container提供JPA2实现。不幸的是,我找不到任何这样的依赖。

此时我唯一的选择是将hibernate-jpa-2.0-api 1.0.0.FINAL声明为提供的依赖项吗?

7 个答案:

答案 0 :(得分:44)

我知道这是一篇相当古老的帖子,如果你想从实现中不可知,那么你应该使用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依赖项。

答案 1 :(得分:38)

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>

答案 2 :(得分:10)

我使用EclipseLink Maven存储库中的javax.persistence工件(而不是eclipselink工件)来访问JPA 2 API类。 POM的片段包括:

<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 dependency的副作用,我在父POM中使用它来允许编译时引用几个Java EE 6 API类。

答案 3 :(得分:4)

这是EclipseLink中JPA2最相关的官方API:

<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时支持更好的泛型。

答案 4 :(得分:3)

对于JPA 2.2 API,maven central提供了“官方”工件,请参阅this answer

答案 5 :(得分:0)

截至今天,我认为最新的一个是:

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

这是你在maven中使用JPA的方法:

<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>

答案 6 :(得分:0)

我能够通过在项目的pom.xml文件中添加几个依赖项来解决我的Maven JPA2依赖关系。请参阅下面的依赖项的xml代码。
通过在Maven Central上向下钻取目录,我找到了最新的groupId和artifactId版本。我刚走过目录树,直到找到persistence.corepersistence.jpa工件的metadata.xml文件。
注意:对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>