latest data central maven dependencies jpa-2.0

data - maven central



¿Dónde puedo encontrar una dependencia JPA2 Maven? (7)

Estoy intentando construir un módulo maven agnóstico de implementación que dependa de JPA2. Desafortunadamente, la única dependencia Maven JPA está basada en JPA1 y, en consecuencia, no puedo usar el método EntityManager.detach () ya que solo es una opción JPA2.

Idealmente, me encantaría poder especificar mi dependencia de javax.persistence en mi Pom y requerir que la aplicación / contenedor suministre la implementación de JPA2. Desafortunadamente, no puedo encontrar ninguna de esas dependencias.

¿Es mi única opción en este momento declarar hibernate-jpa-2.0-api 1.0.0.FINAL como una dependencia proporcionada?


A partir de hoy, creo que el más actualizado es:

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

Así es como puedes usar JPA en un 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>


Esta es la API más relevante y oficial para JPA2 de 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>

A diferencia de la API de Hibernates, estas son de especificación oficial y admiten mejores genéricos cuando se trata de usar Criteria API.


Las clases Hibernate JPA 2 (javax.persistence ...) están aquí:

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


Para la API de JPA 2.2, un artefacto "oficial" está disponible en maven central, ver esta respuesta .


Pude resolver resolver mi dependencia de Maven JPA2 agregando un par de dependencias al archivo pom.xml del proyecto. Vea a continuación el código xml para las dependencias.
Encontré las versiones más recientes de groupId y artifactId al explorar los directorios en Maven Central . Caminé por el árbol de directorios hasta que encontré los archivos metadata.xml para los artefactos persistence.core y persistence.jpa .
Nota : La dependencia de persistence.jpa es lo que realmente trae el jar javax.persistence .

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


Sé que esta es una publicación bastante antigua, si quieres ir a la agnóstico de la implementación, entonces deberías usar la dependencia de la API Java EE en su lugar.

Solo agregue a su POM:

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

Donde $ {jee.version} es tu versión deseada de Java EE. Actualmente estoy usando 7.0. Tiene todas las dependencias de las API EJB, JPA y JSF.


Uso el artefacto javax.persistence (y no el artefacto eclipselink ) del repositorio EclipseLink Maven para acceder a las clases de la API JPA 2. Los fragmentos de POM incluyen:

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

El artefacto javax.persistence contiene todas las clases API y ninguna de las clases EclipseLink (excepto dos), lo que le permite especificar el alcance tal como se proporciona; esto se aplica incluso para el proveedor de EclipseLink JPA (que se encuentra en el Id del artefacto eclipselink ).

No he mezclado el artefacto javax.persistence con el artefacto hibernate-entitymanager , que es la forma en que hibernate-entitymanager la dependencia de otro proyecto que depende de Hibernate EntityManager en lugar de EclipseLink para el proveedor de JPA. A continuación, se muestra un fragmento del POM del segundo proyecto:

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

Cambio los ámbitos de dependencia de provided en otros proyectos para garantizar que las pruebas unitarias tengan un proveedor JPA en el classpath. Esto se hace principalmente para enmascarar los efectos secundarios del uso de la dependencia javaee-api , que utilizo en el POM padre para permitir referencias de tiempo de compilación a varias clases de API de Java EE 6.