如何配置 maven hbm2hbmxml 和 hbm2java 在 mvn clean install 中一个接一个运行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2083727/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 03:21:45  来源:igfitidea点击:

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

javahibernatemaven

提问by sebastianr

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 Java files and then have maven compile those newly created Java files. Has anyone done this before?

我需要能够调用 mvn clean install 并让 maven 调用 hibernate3:hbm2hbmxml 从数据库生成映射文件,然后调用 hbm2java 来获取 Java 文件,然后让 maven 编译那些新创建的 Java 文件。以前有人这样做过吗?

Thanks

谢谢

回答by Bozho

Maven lifecycle

Maven 生命周期

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

如果要执行这个,clean 阶段将首先执行(意味着它将运行 clean 生命周期的所有前面的阶段,加上 clean 阶段本身),然后是 dependency:copy-dependencies 目标,最后执行包阶段(以及默认生命周期的所有先前构建阶段)。

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.

在您发表评论之后,这似乎是 hibernate 插件的“不明智”行为。您可以通过使用Maven antrun 插件“手动”将所需文件复制到所需目录来绕过它。

回答by Stefan De Boey

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

the plugin configuration:

以下配置对我有用。(示例包含 Derby 数据库和 1 个表)
mvn clean package 完成所有工作。

插件配置:

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

回答by user448153

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

如果要编译模型 java 文件(由 reveng 获得),则不需要运行 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.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 :

模型.reven.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”标签

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

回答by Steve Tarver

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.

这两个答案都不适合我开箱即用。经过一番研究,我能够从数据库生成 POJO。希望这能快速跟踪某人。

Simply generate the java files - no mapping files generated.

只需生成 java 文件 - 不生成映射文件。

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.

在 src/test/resources/reveng/hibernate.cfg.xml 中定义您的数据库连接。使用测试分支,因此这些文件不会被复制到可分发工件中。

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

创建要导入的表的列表。再次在测试分支: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

将 hibernate3 maven 插件添加到你的 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

运行 Maven

mvn hibernate3:hbm2java

回答by Twinkle

Add Hibernate 2 plugin in your pom:

在你的 pom 中添加 Hibernate 2 插件:

<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 installand the model classes will be generated automatically from the database.

然后只需使用 maven 构建您的项目,clean install模型类将从数据库自动生成。

回答by AppSturz

Working Example for hibernate3-maven-pluginversion 3.0& hbm2java

hibernate3-maven-plugin版本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>