How to configure maven hbm2hbmxml and hbm2java to run one after the other in mvn clean install

前端 未结 6 1370
一向
一向 2020-12-05 12:37

I need to be able to call mvn clean install and have maven call hibernate3:hbm2hbmxml to generate the mapping files from a database and after than call hbm2java to get the J

相关标签:
6条回答
  • 2020-12-05 13:02

    If you want to have your model java files (obtained by reveng) compiled, you don't need to run hbm2hbmxml.

    plugin configuration:

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

    you fire this with:

    mvn clean hibernate3:hbm2java compile
    

    if you want it to be fired just with:

    mvn clean compile
    

    add the "executions" tag in your plugin definition

                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals><goal>hbm2java</goal></goals>
                    </execution>
                </executions>
    
    0 讨论(0)
  • 2020-12-05 13:02

    Neither of the two answers worked for me out of the box. After a bit of research, I was able to generate POJOs from a database. Hope this fast tracks someone.

    Simply generate the java files - no mapping files generated.

    Define your database connection in src/test/resources/reveng/hibernate.cfg.xml. Using the test branch so these files are not copied into the distributable artifact.

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

    Create a list of tables you want to import. Again in the test branch: 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>
    

    Add the hibernate3 maven plugin to your 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 讨论(0)
  • 2020-12-05 13:04

    Add Hibernate 2 plugin in your 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>
    ...
    

    Then in model Reveng put this.

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

    Then just build your project in maven using clean install and the model classes will be generated automatically from the database.

    0 讨论(0)
  • 2020-12-05 13:08

    the following config works for me. (sample is with Derby database and 1 table)
    mvn clean package does it all.

    the plugin configuration:

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

    0 讨论(0)
  • 2020-12-05 13:09

    Working Example for 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>
    
    0 讨论(0)
  • 2020-12-05 13:19

    Maven lifecycle

    mvn clean dependency:copy-dependencies package
    

    If this were to be executed, the clean phase will be executed first (meaning it will run all preceeding phases of the clean lifecycle, plus the clean phase itself), and then the dependency:copy-dependencies goal, before finally executing the package phase (and all its preceeding build phases of the default lifecycle).

    So, perhaps:

    mvn clean hibernate3:hbm2hbmxml hibernate3:hbm2java package
    

    That said, I'd recommend against perpetually generating classes. This makes you very inflexible.

    After your comment, it seems like an "unwise" behaviour from the hibernate plugin. You can bypass that by "manually" copying the required files to the desired directory, using the Maven antrun plugin.

    0 讨论(0)
提交回复
热议问题