miércoles, 14 de octubre de 2009

Gestionando un proyecto Hibernate desde Maven

Vamos a ver cómo gestionar con Maven un proyecto que utiliza Hibernate.

En primer lugar, vamos a ver cómo configurar las dependencias de Hibernate en Maven. Aquí nos encontramos con un problema, Hibernate depende de la Sun JTA API, que no está disponible en el repositorio central de Maven porque, debido a problemas de licencias, no puede ser distribuida libremente.

Para solucionar este problema existen dos posibles soluciones. La primera es descargar la Sun JTA API de la página web de Sun y despues instalarla en el repositorio local de Maven.

Usaremos el siguiente pom.xml:
<project 
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.roldan.hibernate</groupId>
<artifactId>HibernateMavenProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
</dependency>

</dependencies>
</project>

Para instalar la Sun JTA API en el repositorio usaremos la siguiente instrucción desde la línea de comandos:
mvn install:install-file
-DgroupId=javax.transaction
-DartifactId=jta
-Dversion=1.0.1B
-Dpackaging=jar
-Dfile=jta-1_0_1B-classes.zip

La segunda posible solución sería descartar la dependencia de la Sun JTA API que tiene Hibernate y, en su lugar, obtener una implementación alternativa de este API que pueda ser descargada libremente, como la de Geronimo:
<project 
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.roldan.hibernate</groupId>
<artifactId>HibernateMavenProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.6.ga</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>geronimo-spec</groupId>
<artifactId>geronimo-spec-jta</artifactId>
<version>1.0-M1</version>
</dependency>

</dependencies>
</project>

Una vez resueltas las dependencias de Hibernate en Maven, podemos usar Hibernate en nuestros proyectos. Una herramienta que nos ayudará a simplificar las tareas de administración de estos proyectos es el plugin de Hibernate 3 para Maven, que se puede obtener del repositorio de Codehaus.

Por ejemplo, vamos a usar este plugin para generar el DDL de la base de datos durante el desarrollo, permitiendo reconstruir la base de datos para irnos actualizando a los cambios que se vayan produciendo:
<project>

<repositories>
<repository>
<id>codehaus</id>
<name>Maven Codehaus repository</name>
<url>http://repository.codehaus.org/</url>
</repository>
</repositories>

<build>
<extensions>
<extension>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<componentProperties>
<drop>true</drop>
<outputfilename>schema.sql</outputfilename>
</componentProperties>
</configuration>
</plugin>
</plugins>
</build>
</project>

Para lanzar la ejecución de esta tarea de actualización de la base de datos, usamos el comando:
mvn org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl

1 comentario: