使用Ivy从Maven仓库获取JPA

4

我正在将一个使用JPA + Hibernate的现有项目转换为使用Ivy获取其依赖项。我几乎可以获取所有内容,但是在获取JPA时遇到了麻烦。这是我的ivy.xml文件,没有包含JPA:

<ivy-module version="2.0">
    <info organisation="xxx" module="dataserver"/>
    <dependencies>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1"/>
        <dependency org="com.google.guava" name="guava" rev="r07"/>
        <dependency org="log4j" name="log4j" rev="1.2.16"/>
        <dependency org="org.hibernate" name="hibernate-entitymanager" rev="3.4.0.GA"/>
        <dependency org="c3p0" name="c3p0" rev="0.9.1.2"/>
        <dependency org="mysql" name="mysql-connector-java" rev="5.1.14"/>
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.1"/>
        <dependency org="org.apache.openjpa" name="openjpa-persistence" rev="2.1.0"/>
    </dependencies>
</ivy-module>

我本以为在Maven仓库中能轻松找到JPA,但实际上并不是这样。过了一会儿,我找到了OpenJPA:

<ivy-module version="2.0">
    <info organisation="xxx" module="dataserver"/>
    <dependencies>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1"/>
        <dependency org="com.google.guava" name="guava" rev="r07"/>
        <dependency org="log4j" name="log4j" rev="1.2.16"/>
        <dependency org="org.hibernate" name="hibernate-entitymanager" rev="3.4.0.GA"/>
        <dependency org="c3p0" name="c3p0" rev="0.9.1.2"/>
        <dependency org="mysql" name="mysql-connector-java" rev="5.1.14"/>
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.1"/>
        <dependency org="org.apache.openjpa" name="openjpa-persistence" rev="2.1.0"/>
    </dependencies>
</ivy-module>

尽管下载速度较慢,但似乎包含了我所缺少的接口/类,例如EntityManager。然而,它与我之前拥有的分布式Hibernate的JPA版本不同,因为我现在缺少EntityManager.createQuery(String,Class)方法。但是我无法找到任何比OpenJPA 2.1.0更新的版本。

在Maven库中,什么是适当的JPA源呢?

5个回答

1

我能否通过建议使用配置映射来改进Thomas的答案。这将排除在Hibernate模块中标记为“可选”的jar文件(例如,您不需要下载ANT)

以下示例列出了与Maven模块中3个主要范围对应的3个配置。

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
  <info organisation="com.myspotontheweb" module="demo1"/>
  <configurations defaultconfmapping="compile->default">
    <conf name="compile" description="Compile dependencies"/>
    <conf name="runtume" description="Runtime dependencies" extends="compile"/>
    <conf name="test" description="Test dependencies" extends="runtime"/>        
  </configurations>
  <dependencies>
    <dependency org="org.hibernate" name="ejb3-persistence" rev="1.0.2.GA"/>
    <dependency org="org.hibernate" name="hibernate-annotations" rev="3.4.0.GA"/>
    <dependency org="org.hibernate" name="hibernate-core" rev="3.3.2.GA"/>
  </dependencies>
</ivy-module>

请注意defaultconfmapping属性。这告诉ivy从"Maven"中的"compile"范围下载jars。

0
如果您仍然使用Maven版本,可以调用mvn dependency:tree命令,并查看Hibernate在其依赖项中定义的groupid和artifactid(除非Hibernate是提供的)。
编辑:
我们使用Maven来管理这些Hibernate依赖项:
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>3.3.2.GA</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>ejb3-persistence</artifactId>
  <version>1.0.2.GA</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-annotations</artifactId>
  <version>3.4.0.GA</version>
</dependency>

这是ivy.xml的等效内容:
<dependency org="org.hibernate" name="ejb3-persistence" rev="1.0.2.GA"/>
<dependency org="org.hibernate" name="hibernate-annotations" rev="3.4.0.GA"/>
<dependency org="org.hibernate" name="hibernate-core" rev="3.3.2.GA"/>

它从来不是一个Maven项目。它从无到有使用了Ivy,但使用了Maven仓库。 - Bart van Heukelom
请查看我们正在使用的Hibernate依赖项的编辑。那应该是你所需要的全部内容。EntityManager接口位于ejb3-persistence中。 - Thomas

0

0

0

Hibernate的JAR文件存储在Maven中央仓库。 - Mark O'Connor
抱歉,不是这样的。旧版本在那里,最高版本为3.3.2.GA。更新版本在JBoss Nexus存储库中:https://repository.jboss.org/nexus/content/groups/public-jboss/org/hibernate/hibernate-core/4.0.0.Alpha1/ - jpkroehling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接