2010-01-18 27 views
9

Necesito poder llamar a mvn clean install y tener habilitada la llamada hibernate3: hbm2hbmxml para generar los archivos de mapeo desde una base de datos y después llamar a hbm2java para obtener los archivos Java y luego maven compilar esos archivos Java recién creados. ¿Alguien ha hecho esto antes?Cómo configurar maven hbm2hbmxml y hbm2java para ejecutar uno después del otro en mvn clean install

Gracias

+0

He actualizado mi respuesta indicando cómo "manual" (a través de Maven) copiar los archivos a la ubicación deseada – Bozho

Respuesta

1

Maven lifecycle

mvn clean dependency:copy-dependencies package 

Si esto llegara a ser ejecutado, la fase de limpieza se ejecutará primero (lo que significa que se ejecutará todas las fases precedentes del ciclo de vida limpia, además de la fase de limpieza sí mismo), y luego la dependencia: objetivo de copias-dependencias, antes de ejecutar finalmente la fase del paquete (y todas las fases de compilación anteriores del ciclo de vida predeterminado).

Por lo tanto, tal vez :

mvn clean hibernate3:hbm2hbmxml hibernate3:hbm2java package 

Dicho esto, me gustaría recomendar en contra de las clases que generan perpetuamente. Esto te hace muy inflexible.

Después de su comentario, parece ser un comportamiento "imprudente" del complemento de hibernación. Puede eludir eso copiando "manualmente" los archivos necesarios en el directorio deseado, usando el Maven antrun plugin.

+0

Bozho , esta no es exactamente la forma en que entendí la pregunta (que no es para nada trivial, el flujo de trabajo deseado implica una configuración realmente complicada del complemento hibernate3). Pero tal vez me perdí algo. –

+0

Tampoco estaba seguro de obtener todo, pero al menos debería intentarlo de esta manera, y ver qué pasa. – Bozho

+0

Gracias por la respuesta. Lo que estoy buscando es poder hacer que esos objetivos sean parte de mi proceso de integración continuo. Pude hacer que hbm2hbmxml funcione, pero coloca los archivos * .hbm.xml en ./target/hibernate3/generated-mappings/mypackage. Cuando ejecuto hbm2java obtengo un error diciendo "mypackage/Domain.hbm.xml not found". ¿No debería el complemento saber dónde encontrar esos archivos? Lo hice ejecutar agregando la entrada y hbm2java genera el código fuente, pero de nuevo, coloca los archivos Java bajo la carpeta de destino y cuando compilo no compila esos archivos. ¿Alguna pista? Gracias – sebastianr

0

la siguiente configuración funciona para mí. (la muestra está con la base de datos de Derby y 1 tabla)
mvn clean package lo hace todo.

la configuración del plugin:

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>hibernate3-maven-plugin</artifactId> 
<version>2.2</version> 
<executions> 
    <execution> 
     <id>hbm2hbmxml</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>hbm2hbmxml</goal> 
     </goals> 
     <configuration> 
      <components> 
       <component> 
        <name>hbm2hbmxml</name> 
        <outputDirectory>src/main/resources</outputDirectory> 
       </component> 
      </components> 
     </configuration> 
    </execution> 
    <execution> 
     <id>hbm2java</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>hbm2java</goal> 
     </goals> 
     <configuration> 
      <components> 
       <component> 
        <name>hbm2java</name> 
        <implementation>configuration</implementation> 
       </component> 
      </components> 
      <componentProperties> 
       <jdk5>true</jdk5> 
       <configurationfile>/src/main/resources/hibernate.cfg.xml 
       </configurationfile> 
      </componentProperties> 
     </configuration> 
    </execution> 
</executions> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.derby</groupId> 
     <artifactId>derbyclient</artifactId> 
     <version>10.4.2.0</version> 
    </dependency> 
</dependencies> 

hibernate.cfg.xml:

<hibernate-configuration> 
<session-factory> 
    <property name="connection.url">jdbc:derby://localhost:1527/demo</property> 
    <property name="connection.username">app</property> 
    <property name="connection.driver_class">org.apache.derby.jdbc.ClientDriver</property> 
    <property name="dialect">org.hibernate.dialect.DerbyDialect</property> 
    <property name="connection.password">password</property> 
    <property name="hibernate.show_sql">true</property> 

    <mapping resource="Tag.hbm.xml" /> 
</session-factory> 

13

Si usted quiere tener sus archivos java modelo (obtenido por Reveng) compilado, no es necesario ejecutar hbm2hbmxml.

configuración plugin:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>hibernate3-maven-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <components> 
        <component> 
         <name>hbm2java</name> 
         <outputDirectory>src/main/java</outputDirectory> 
         <implementation>jdbcconfiguration</implementation> 
        </component> 
       </components> 
       <componentProperties> 
        <revengfile>/src/main/resources/reveng/model.reveng.xml</revengfile> 
        <propertyfile>/src/main/resources/META-INF/hibernate.properties</propertyfile> 
        <jdk5>true</jdk5> 
        <ejb3>true</ejb3> 
       </componentProperties> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>mysql</groupId> 
        <artifactId>mysql-connector-java</artifactId> 
        <version>5.0.8</version> 
       </dependency> 
       <dependency> 
        <groupId>cglib</groupId> 
        <artifactId>cglib-nodep</artifactId> 
        <version>2.1_3</version> 
       </dependency> 
      </dependencies>    
     </plugin> 
    </plugins> 
</build> 

hibernate.properties:

hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect 
hibernate.connection.driver_class = com.mysql.jdbc.Driver 
hibernate.connection.url = jdbc:mysql://localhost:3306/YOUR_DB 
hibernate.connection.username = yourUsrName 
hibernate.connection.password= yourPwd 
hibernate.default_schema = YOUR_DB 

model.reveng.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-reverse-engineering SYSTEM "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd"> 
<hibernate-reverse-engineering> 
    <table-filter match-name=".*" package="your.package.here" /> 
</hibernate-reverse-engineering> 

despida esto con:

mvn clean hibernate3:hbm2java compile 

si usted quiere que sea despedido simplemente con:

mvn clean compile 

agregar la etiqueta "ejecuciones" en su definición del plugin

  <executions> 
       <execution> 
        <phase>compile</phase> 
        <goals><goal>hbm2java</goal></goals> 
       </execution> 
      </executions> 
5

Ninguna de las dos respuestas trabajado para mí de la caja. Después de un poco de investigación, pude generar POJO desde una base de datos. Espero que esto ayude a alguien.

Simplemente genere los archivos java - no se generan archivos de mapeo.

Defina su conexión de base de datos en src/test/resources/reveng/hibernate.cfg.xml. Usar la rama de prueba para que estos archivos no se copien en el artefacto distribuible.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory name="pmSessionFactory"> 
     <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <!-- Note that we are pointing directly at the catalog so we can use 
      unqualified table names --> 
     <property name="hibernate.connection.url">jdbc:oracle:thin:@server.domain.com:1521:catalog</property> 
     <property name="hibernate.connection.password">login</property> 
     <property name="hibernate.connection.username">****</property> 
     <property name="hibernate.default_schema">PM</property> 
    </session-factory> 
</hibernate-configuration> 

Crear una lista de tablas que desea importar. De nuevo en la rama de prueba: src/test/resources/Reveng/model.reveng.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-reverse-engineering PUBLIC 
    "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" > 

<hibernate-reverse-engineering> 
    <!-- This assumes your database connection is pointing to the proper catalog --> 
    <!-- To get all tables in the named schema, use the following 
     <schema-selection match-schema="PM" /> 
    --> 
    <!-- to get only the named tables --> 
    <schema-selection match-schema="PM" match-table="PM_PROPERTY"/> 
    <schema-selection match-schema="PM" match-table="PM_APPLICATION"/> 
    <schema-selection match-schema="PM" match-table="PM_PROPERTY_TYPE"/> 
</hibernate-reverse-engineering> 

Añadir el plugin de Maven Hibernate3 a su pom

<build> 
    <plugins> 
    ... 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>hibernate3-maven-plugin</artifactId> 
     <version>2.2</version> 
     <configuration> 
     <components> 
      <component> 
      <name>hbm2java</name> 
      <outputDirectory>src/main/java/com/me/examples/pm/data</outputDirectory> 
      <implementation>jdbcconfiguration</implementation> 
      </component> 
     </components> 
     <componentProperties> 
      <!-- Storing the reveng files in the test branch means we are not 
       deploying connection information--> 
      <revengfile>src/test/resources/reveng/model.reveng.xml</revengfile> 
      <configurationfile>src/test/resources/reveng/hibernate.cfg.xml</configurationfile> 
      <jdk5>true</jdk5> 
      <ejb3>true</ejb3> 
     </componentProperties> 
     </configuration> 
     <dependencies> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>classes12</artifactId> 
      <version>10.2.0.1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.1_3</version> 
     </dependency> 
     </dependencies> 
    </plugin> 
    </plugins> 
</build> 

Run experto

mvn hibernate3:hbm2java 
0

Agrega el complemento Hibernate 2 en tu pom:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>hibernate3-maven-plugin</artifactId> 
    <version>2.2</version> 

      <executions> 
       <execution> 
        <id>generate-mapping-files</id> 
        <phase>compile</phase> 

       <goals> 
        <goal>hbm2hbmxml</goal> 
        <goal>hbm2cfgxml</goal> 
        <goal>hbm2java</goal> 
       </goals> 
... 

Luego en el modelo Reveng pon esto.

<!-- Primary Tables --> 
<schema-selection match-schema="TEST_SCHEMA" match-table="TEST_TABLE" /> 

A continuación, sólo construir su proyecto en experta en el uso de clean install y las clases del modelo se generarán automáticamente de la base de datos.

1

Ejemplo de trabajo para Hibernate3-maven-plugin de versión 3.0 & hbm2java

<profile> 
    <id>hbm2java</id> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>hibernate3-maven-plugin</artifactId> 
     <version>3.0</version> 
     <configuration> 
      <hibernatetool> 
      <classpath> 
       <path location="${project.build.directory}/classes" /> 
      </classpath> 
      <jdbcconfiguration propertyfile="${basedir}/helper/hibernate.properties" revengfile="${basedir}/helper/hibernate-reverse-engineering.xml" 
       reversestrategy="de.hibernate.ExampleStrategy" /> 
      <hbm2java jdk5="true" ejb3="true" destdir="${project.build.sourceDirectory}" /> 
      </hibernatetool> 
     </configuration> 
     <executions> 
      <execution> 
      <goals> 
       <goal>hbm2java</goal> 
      </goals> 
      <!-- must be compile or higher to find ExampleStrategy class in same project --> 
      <phase>compile</phase> 
      </execution> 
     </executions> 
     <dependencies> 
      <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>3.3.2.GA</version> 
      </dependency> 
      <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.1_3</version> 
      </dependency> 
      <dependency> 
      <groupId>com.oracle.jdbc</groupId> 
      <artifactId>ojdbc6</artifactId> 
      <version>${ojdbc6.version}</version> 
      </dependency> 
     </dependencies> 
     </plugin> 
    </plugins> 
    </build> 
</profile> 
Cuestiones relacionadas