2010-01-18 5 views
9

Ich muss in der Lage sein, mvn clean install aufrufen und maven Anruf hibernate3: hbm2hbmxml die Mapping-Dateien aus einer Datenbank zu generieren und danach als Aufruf hbm2java um die Java-Dateien zu erhalten und dann Maven diese neu erstellten Java-Dateien kompilieren zu lassen. Hat jemand das schon mal gemacht?Wie maven zu konfigurieren hbm2hbmxml und hbm2java nacheinander in mvn sauber zu installieren

Dank

+0

ich meine Antwort aktualisiert die besagt, wie man "manuell" (durch Maven) – Bozho

Antwort

1

Maven lifecycle

mvn clean dependency:copy-dependencies package 

Wenn dies ausgeführt würde, wird die saubere Phase zuerst ausgeführt werden (dh es werden alle vorhergehenden Phasen des sauberen Lebenszyklus laufen, sowie die saubere Phase selbst), und dann das Abhängigkeitsziel: copy-dependencies, bevor schließlich die Paketphase (und alle vorhergehenden Build-Phasen des Standardlebenszyklus) ausgeführt wird.

So vielleicht:

mvn clean hibernate3:hbm2hbmxml hibernate3:hbm2java package 

Das heißt, ich gegen ständig zu erzeugen Klassen empfehlen würde. Das macht dich sehr unflexibel.

Nach Ihrem Kommentar scheint es ein "unweises" Verhalten vom Hibernate-Plugin. Sie können das umgehen, indem Sie die erforderlichen Dateien manuell in das gewünschte Verzeichnis kopieren, indem Sie Maven antrun plugin verwenden.

+0

die Dateien an den gewünschten Ort kopieren Bozho , das ist nicht so, wie ich die Frage verstanden habe (was überhaupt nicht trivial ist, der gewünschte Workflow beinhaltet eine wirklich schwierige Konfiguration des Hibernate3-Plugins). Aber vielleicht habe ich etwas verpasst. –

+0

Ich war mir auch nicht sicher, ob ich alles bekomme, aber zumindest sollte er es auf diese Weise versuchen und sehen, was passiert. – Bozho

+0

Danke für die Antwort. Ich möchte diese Ziele in meinen kontinuierlichen Integrationsprozess integrieren. Ich habe es geschafft, dass hbm2hbmxml funktioniert, aber die * .hbm.xml-Dateien werden unter ./target/hibernate3/generated-mappings/mypackage abgelegt. Wenn ich hbm2java starte, bekomme ich einen Fehler, der sagt: "mypackage/Domain.hbm.xml nicht gefunden". Sollte das Plugin nicht wissen wo diese Dateien zu finden sind? Ich habe das ausgeführt, indem ich den -Eintrag hinzugefügt habe, und hbm2java erzeugt den Quellcode, aber er legt die Java-Dateien wieder unter den Zielordner und kompiliert sie nicht, wenn ich kompiliere. Irgendwelche Hinweise? Vielen Dank – sebastianr

0

die folgende Konfiguration funktioniert für mich. (Beispiel ist mit Derby-Datenbank und 1 Tabelle)
mvn sauberes Paket tut alles.

die Plugin-Konfiguration:

<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

Wenn Sie Ihre Modell Java-Dateien haben wollen (von reveng erhalten) kompiliert, müssen Sie hbm2hbmxml nicht ausführen.

Plugin-Konfiguration:

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

Sie feuern dies mit:

mvn clean hibernate3:hbm2java compile 

, wenn Sie es entlassen werden wollen nur mit:

mvn clean compile 

fügen Sie den "Hinrichtung" Tag in Ihrer Plugin Definition

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

Keine der beiden Antworten arbeitete für mich aus der Box. Nach ein wenig Recherche konnte ich POJOs aus einer Datenbank generieren. Hoffe, dass dieser schnell jemanden verfolgt.

Generieren Sie einfach die Java-Dateien - keine Mapping-Dateien generiert.

Definieren Sie Ihre Datenbankverbindung in src/test/resources/revng/hibernate.cfg.xml. Verwenden Sie den Testzweig, damit diese Dateien nicht in das verteilbare Artefakt kopiert werden.

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

Erstellen Sie eine Liste von Tabellen, die Sie importieren möchten. Auch im Testzweig: 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> 

die Hibernate3 Maven Plugin Ihre pom hinzufügen

<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

Fügen Sie Hibernate 2 Plugin in Ihrem Pom hinzu:

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

Dann im Modell Reveng dies.

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

Dann einfach Ihr Projekt in Maven bauen clean install und die Modellklassen verwenden, automatisch aus der Datenbank generiert werden.

1

Arbeitsbeispiel für 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> 
Verwandte Themen