当前位置: 首页 > 知识库问答 >
问题:

maven hibernate3 sql插件执行顺序

郤旭东
2023-03-14

我正在尝试使用hibernate3 maven插件和sql maven插件。我的目标是我可以运行“maven generate sources”,它应该做到:

1) hibernate3 maven插件生成初始化。sql

2) sql maven插件执行它(一个其他脚本)

我的配置的问题是:如果我运行生成源只有hibernate3-maven-plugin它的工作原理和生成thinit.sql但我尝试运行两个插件它将运行sql-maven-plugin第一

并以一个错误结束:

Caused by: org.apache.maven.plugin.MojoExecutionException: /my/path/src/main/resources/sql/init.sql not found.

这是我的插件配置:

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>hibernate3-maven-plugin</artifactId>
        <version>3.0</version>
        <dependencies>                  
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.13</version>
            </dependency>
        </dependencies>
        <executions>
            <execution>
                <id>create-script</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>hbm2ddl</goal>
                </goals>
                <configuration>
                    <hibernatetool destdir="${project.basedir}/src/main/resources/sql/">
                        <classpath>
                            <path location="${project.basedir}/src/main/java" />
                        </classpath>
                        <configuration
                            configurationfile="${project.basedir}/src/main/resources/hibernate/hibernate-mysql.cfg.xml" />
                        <hbm2ddl create="true" drop="true" export="false"
                            outputfilename="init.sql" format="true" console="true" />
                    </hibernatetool>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <version>1.5</version>
        <dependencies>                  
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.13</version>
            </dependency>
        </dependencies>
        <configuration>
            <driver>com.mysql.jdbc.Driver</driver>
            <url>jdbc:mysql://localhost/MYDB</url>
            <username>root</username>
            <password>root</password>
        </configuration>
        <executions>
            <execution>
                <id>init-db</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>execute</goal>
                </goals>
                <configuration>
                    <autocommit>true</autocommit>
                    <srcFiles>
                        <srcFile>src/main/resources/sql/init.sql</srcFile>
                        <srcFile>src/main/resources/sql/insertMessages.sql</srcFile>
                    </srcFiles>
                </configuration>
            </execution>
        </executions>
    </plugin>            
</plugins>

使现代化

事实上,我不想在构建过程中运行sql。我只想为其他开发人员设置一种简单的方法,将他们的db重置为最新的db模式,并填充testData。最后,我应该像这样运行mvn:mvn hibernate3:hbm2ddl sql:execute

执行这两个插件

我试图删除<代码>

ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (default-cli) on project DideuroDb: There was an error creating the AntRun task. NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (default-cli) on project myProject: There was an error creating the AntRun task.

更新2

这样的配置效果更好一些:

它生成init.sql但不执行任何操作:

[INFO] 0 of 0 SQL statements executed successfully
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

配置更新:

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>hibernate3-maven-plugin</artifactId>
        <version>3.0</version>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.13</version>
            </dependency>
        </dependencies>     
        <configuration>
            <hibernatetool destdir="${project.basedir}/src/main/resources/sql/">
                <classpath>
                    <path location="${project.basedir}/src/main/java" />
                </classpath>
                <configuration
                    configurationfile="${project.basedir}/src/main/resources/hibernate/hibernate-mysql.cfg.xml" />
                <hbm2ddl create="true" drop="true" export="false"
                    outputfilename="init.sql" format="true" console="true" />

            </hibernatetool>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <version>1.5</version>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.13</version>
            </dependency>
        </dependencies>
        <configuration>
            <driver>com.mysql.jdbc.Driver</driver>
            <url>jdbc:mysql://localhost/MYDB</url>
            <username>root</username>
            <password>root</password>
        </configuration>
        <executions>
            <execution>
                <id>init-db</id>
                <goals>
                    <goal>execute</goal>
                </goals>
                <configuration>
                    <autocommit>true</autocommit>
                    <srcFiles>
                        <srcFile>src/main/resources/sql/init.sql</srcFile>
                        <srcFile>src/main/resources/sql/insertMessages.sql</srcFile>
                    </srcFiles>
                </configuration>
            </execution>
        </executions>
    </plugin>       
</plugins>

共有1个答案

彭宜人
2023-03-14

由于您不想将执行作为常规构建的一部分来运行,但为了方便开发人员,请使用默认的cli“魔术”执行标识(请参见https://maven.apache.org/guides/mini/guide-default-execution-ids.html)。因此,在执行中既不包括阶段也不包括目标,并将其命名为“默认的cli”。这样,它的配置仅在手动调用mvn hibernate3: hbm2ddl sql:执行时使用:

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>hibernate3-maven-plugin</artifactId>
        <version>3.0</version>
        <dependencies>
          ...
        </dependencies>
        <executions>
          <execution>
            <id>default-cli</id>
            <configuration>
              ...
            </configuration>
          <execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <version>1.5</version>
        <dependencies>
          ...
        </dependencies>
        <configuration>
            <driver>com.mysql.jdbc.Driver</driver>
            <url>jdbc:mysql://localhost/MYDB</url>
            <username>root</username>
            <password>root</password>
        </configuration>
        <executions>
            <execution>
                <id>default-cli</id>
                <configuration>
                    <autocommit>true</autocommit>
                    <srcFiles>
                        <srcFile>src/main/resources/sql/init.sql</srcFile>
                        <srcFile>src/main/resources/sql/insertMessages.sql</srcFile>
                    </srcFiles>
                </configuration>
            </execution>
        </executions>
    </plugin>       
</plugins>

这样,您的“手动”目标配置将永远不会干扰一些正常的生命周期配置。

还有两点:

  • 考虑始终创建init。sql作为构建的一部分,并将它们作为附加工件(使用分类器sql)附加到项目中。这将使以后在修订版中检索正确的sql变得更容易
 类似资料:
  • 我一直在绞尽脑汁研究maven插件的执行顺序和生成类的打包。 我需要从XSD生成带有注释的pojos,为此我使用maven-jaxb2-plugin,它消耗一个binding.xjb(一个由要注释的完全分类的字段名组成的xml文件)文件并将注释添加到生成的pojos。除此之外,我还有一个从映射文件动态生成binding.xjb文件的机制,目的是只提供yaml文件格式的映射,而不是binding.x

  • 使用统一的控制脚本来初始化其他脚本 一般我都会有一个 Game.ts 的脚本作为总的控制脚本,假如我还有 Player.ts, Enemy.ts, Menu.ts 三个组件,那么他们的初始化过程是这样的: // Game.ts import { _decorator, Component, Node } from "cc"; const { ccclass, property } = _decor

  • Hprose 中间件的顺序执行是按照添加的前后顺序执行的,假设添加的中间件处理器分别为:handler1, handler2 … handlerN,那幺执行顺序就是 handler1, handler2 … handlerN。 不同类型的 Hprose 中间件和 Hprose 其它过程的执行流程如下图所示: +--------------------------------------------

  • 问题内容: 我试图理解这段代码,不确定为什么第二遍在第一遍之前执行。如果有人真的可以帮助我,那就太好了! 输出: 问题答案: 您没有任何内容可以显式同步两个goroutine的顺序。如果运行足够的时间,您将看到调用以不同的顺序进行打印。当执行goroutine时,由于它们是并发操作,因此无法保证它们将何时执行和/或完成。您需要使用各种标准库程序包或通道本身来同步并发运行的goroutine的执行。

  • 关于此代码段,我有一个问题要问您: 上面的脚本应该这样做: 设置位置哈希为 在任何进一步的变化- 这就是问题所在:为什么在第一次执行时调用?这个脚本不应该只更改哈希而不更改任何警报吗? 我如何修复它,使其按描述工作?

  • 类D 主要方法是 Bean配置文件是 程序的输出为: