我试图同时使用插件hibernate3-maven-plugin和sql plugin。我的目标是,我可以运行"maven生成源“,它应该这样做:
1) Hibernate3-maven插件生成init.sql。
2) sql-maven-plugin执行它(其他脚本)
我的配置的问题是:如果我只使用hibernate3-maven-plugin运行生成源,那么它可以工作并生成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。我只想为其他开发人员设置一种简单的方法,将他们的数据库重置为最新的db模式并使用testData填充。最后,我应该像这样运行mvn : mvn hibernate3 3: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>发布于 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时使用
<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>这样,您的“手动”目标的配置将永远不会干扰一些正常的生命周期配置。
再来两点:
src/main/resources中。这可能导致在您的开发人员的工作区中展开类和sql以及“幻影更改”。要生成的正确位置在${project.build.directory}下面的某个地方,通常是target/generated-resources/hibernate3。https://stackoverflow.com/questions/22127759
复制相似问题