首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven hibernate3 + sql插件执行顺序

Maven hibernate3 + sql插件执行顺序
EN

Stack Overflow用户
提问于 2014-03-02 12:50:37
回答 1查看 975关注 0票数 0

我试图同时使用插件hibernate3-maven-plugin和sql plugin。我的目标是,我可以运行"maven生成源“,它应该这样做:

1) Hibernate3-maven插件生成init.sql。

2) sql-maven-plugin执行它(其他脚本)

我的配置的问题是:如果我只使用hibernate3-maven-plugin运行生成源,那么它可以工作并生成th init.sql,但是我尝试运行这两个插件,它将运行sql-maven-plugin第一个

并以一个错误结束:

代码语言:javascript
复制
Caused by: org.apache.maven.plugin.MojoExecutionException: /my/path/src/main/resources/sql/init.sql not found.

这是我的插件配置:

代码语言:javascript
复制
<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模式并使用testData填充。最后,我应该像这样运行mvn : mvn hibernate3 3:hbm2ddl sql:execute

执行这两个插件

我尝试在两次执行中删除<phase/>,但也有一个错误:

代码语言:javascript
复制
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,但不执行任何操作:

代码语言:javascript
复制
[INFO] 0 of 0 SQL statements executed successfully
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

更新配置:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-02 13:40:45

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

代码语言:javascript
复制
<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检索到修订版。
  • 请不要将sql生成到src/main/resources中。这可能导致在您的开发人员的工作区中展开类和sql以及“幻影更改”。要生成的正确位置在${project.build.directory}下面的某个地方,通常是target/generated-resources/hibernate3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22127759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档