【发布时间】:2014-04-03 09:06:19
【问题描述】:
我正在尝试同时使用插件 hibernate3-maven-plugin 和 sql-maven-plugin。 我的目标是我可以运行“maven generate-sources”并且应该这样做:
1) hibernate3-maven-plugin 生成init.sql
2) sql-maven-plugin 执行它(一个其他脚本)
我的配置问题是: 如果我只使用 hibernate3-maven-plugin 运行 generate-sources 它可以工作并生成 th init.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。 我只想为其他开发人员设置一种简单的方法,将他们的数据库重置为最新的数据库模式并填充 testData。 最后我应该像这样运行 mvn:mvn hibernate3:hbm2ddl sql:execute
同时执行两个插件
我尝试在两次执行中删除<phase/>,但也出现错误:
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>
【问题讨论】:
-
为什么要将 sql 作为构建脚本的一部分运行?为什么在生成源阶段?就此而言,hibernate 生成应该放在 generate-resources 中,而不是 generate-sources 中。如果您希望将 sql 作为集成测试的一部分执行(这是唯一有意义的选项),请将其放入准备集成测试阶段。
-
另外:哪个 maven 版本(插件执行顺序已更改)以及您是否在父 pom 中定义了插件的执行(在这种情况下是 sql,这将解释错误)
-
我正在使用 Eclipse 中嵌入的 maven:3.0.4,我更新了关于您的第一条评论的问题
标签: maven maven-plugin