我想同时使用插件hibernate3-maven-plugin和sql-maven-plugin。 我的目标是,我可以运行 “maven的产生来源”,它应该做的:Maven hibernate3 + sql插件执行顺序
1)Hibernate3中,Maven的插件生成init.sql
2)SQL-Maven的插件执行它(的其他一些脚本)
我配置的问题是: 如果我运行产生来源,只有-Maven的插件Hibernate3的工作原理,并生成日init.sql但我试着运行这两个插件它将运行SQL-先插入maven-plugin
并以e RROR:
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>
UPDATE
其实我不想我的生成过程中运行SQL。 我只想为其他开发人员设置一个简单的方法来将其数据库重置为最新的数据库模式并使用testData进行填充。 到底我应该这样MVN运行:MVN Hibernate3的:就是hbm2ddl SQL:执行
同时执行插件
我tryed以消除双方处决<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但doen't执行什么:
[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作为构建脚本的一部分?为什么在生成资源阶段?就此而言,休眠生成应该放在生成资源中,而不是生成源中。如果你希望你的sql作为集成测试的一部分来执行(这是唯一有意义的选择),把它放到准备集成测试阶段。 – blackbuild
另外:哪个maven版本(插件执行顺序改变),你有执行你的插件在父pom中定义(在这种情况下,这将解释错误的顺序) – blackbuild
我使用嵌入在eclipse中的maven:3.0.4,我更新了关于您的第一条评论 – jpprade