2010-01-18 5 views
9

Je dois pouvoir appeler mvn clean install et avoir maven appel hibernate3: hbm2hbmxml pour générer les fichiers de mappage à partir d'une base de données et après avoir appelé hbm2java pour obtenir les fichiers Java et ensuite maven compiler ces fichiers Java nouvellement créés. Est-ce que quelqu'un a déjà fait ça?Comment configurer maven hbm2hbmxml et hbm2java pour exécuter l'un après l'autre dans mvn clean install

Merci

+0

Je mis à jour ma réponse indiquant comment "manuellement" (par Maven) copier les fichiers à l'endroit désiré – Bozho

Répondre

1

Maven lifecycle

mvn clean dependency:copy-dependencies package 

Si cela devait être exécuté, la phase de nettoyage sera exécuté en premier (ce qui signifie qu'il se déroulera toutes les phases précédant du cycle de vie propre, plus la phase de nettoyage lui-même), puis l'objectif dependency: copy-dependencies, avant d'exécuter finalement la phase package (et toutes ses phases de construction précédentes du cycle de vie par défaut).

Alors, peut-être :

mvn clean hibernate3:hbm2hbmxml hibernate3:hbm2java package 

Cela dit, je recommande contre les classes générant perpétuellement. Cela vous rend très inflexible. Après votre commentaire, il semble que ce soit un comportement "imprudent" de la part du plugin hibernate. Vous pouvez contourner cela en copiant "manuellement" les fichiers requis dans le répertoire désiré, en utilisant le Maven antrun plugin.

+0

Bozho , ce n'est pas exactement comment j'ai compris la question (ce qui n'est pas trivial du tout, le workflow voulu implique une configuration vraiment compliquée du plugin hibernate3). Mais peut-être que j'ai raté quelque chose. –

+0

Je ne savais pas non plus si je recevais tout, mais au moins il devrait essayer de cette façon, et voir ce qui se passe. – Bozho

+0

Merci pour la réponse. Ce que je cherche, c'est de pouvoir intégrer ces objectifs dans mon processus d'intégration continue. J'ai réussi à faire fonctionner hbm2hbmxml mais place les fichiers * .hbm.xml sous ./target/hibernate3/generated-mappings/mypackage. Quand je lance hbm2java, j'obtiens un échec disant "mypackage/Domain.hbm.xml non trouvé". Le plugin ne devrait-il pas savoir où trouver ces fichiers? Je l'ai fait en ajoutant l'entrée et hbm2java génère le code source, mais encore une fois, il place les fichiers Java sous le dossier cible et quand je compile, il ne compile pas ces fichiers. Des indices? Merci – sebastianr

0

la configuration suivante fonctionne pour moi. (échantillon est avec la base de données de Derby et 1 table)
mvn paquet propre fait tout.

la configuration du 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 vous voulez avoir votre modèle fichiers java (obtenu par RevEng) compilé, vous n'avez pas besoin d'exécuter hbm2hbmxml.

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

vous feu ce avec:

mvn clean hibernate3:hbm2java compile 

si vous voulez qu'il soit tiré juste avec:

mvn clean compile 

ajouter le tag "Exécutions" dans la définition du plugin

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

Aucune des deux réponses travaillé pour moi hors de la boîte. Après quelques recherches, j'ai pu générer des POJO à partir d'une base de données. Espérons que cette piste rapide quelqu'un.

Générez simplement les fichiers java - aucun fichier de mapping généré. Définissez votre connexion à la base de données dans src/test/resources/reveng/hibernate.cfg.xml.

En utilisant la branche de test, ces fichiers ne sont pas copiés dans l'artefact distribuable.

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

Créer une liste de tables que vous souhaitez importer. Encore une fois dans la branche de test: 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> 

Ajouter le plugin maven hibernate3 à votre 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 maven

mvn hibernate3:hbm2java 
0

Ajouter le plugin Hibernate 2 dans votre 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> 
... 

Ensuite, dans le modèle Reveng mettre cela.

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

Ensuite, il suffit de construire votre projet Maven en utilisant clean install et les classes du modèle seront générées automatiquement à partir de la base de données.

1

Exemple de travail pour hibernate3-maven-plugin Version 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> 
Questions connexes