sql-maven-plugin插件提供了sql脚本的执行功能,允许用户执行指定的sql脚本文件或语句。
最近在进行一个项目是基于maven管理的java开发项目,其中有一个环节要对数据库初始化创建表,需要在maven中执行,正好有机会学习了sql-maven-plugin的使用.
关于sql-maven-plugin的详细说明参见http://www.mojohaus.org/sql-maven-plugin
下面的maven脚本实现的功能就是在mysql数据库中执行指定的sql脚本(create_tables.sql)来创建表:
run-sql.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>yourGroupId</groupId> <artifactId>yourArtifactId</artifactId> <!--这里package不能使用默认的jar,否则不会执行插件--> <packaging>maven-plugin</packaging> <name>facelog-sql</name> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <version>1.5</version> <dependencies> <!-- 定义依赖的数据库驱动jar包(mysql) --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> </dependencies> <configuration> <!-- 定义数据库连接参数 --> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/test</url> <username>root</username> <password></password> <!-- 指定要执行的sql脚本 'sql'文件夹为脚本所在文件夹下的子文件夹 --> <srcFiles> <srcFile>${project.basedir}/sql/create_tables.sql</srcFile> </srcFiles> </configuration> </plugin> </plugins> </build> </project>
运行方式如下:
# 因为上面的脚本我没有使用缺省的文件名pom.xml,所以maven执行的时候要用-f 指定文件名 mvn -f run-sql.xml sql:execute
定义多个独立执行的execution
上面的脚本可以一次性执行一个或多个sql脚本,如果我们希望每个脚本可以在命令行分别独立执行,那么就要定义多个execution来实现。 比如我们将删除表的语句和建表语句分成两个文件(clean_tables.sql,create_tables.sql),希望在命令行分别执行两个脚本,那么 上面脚本就修改成如下的样子:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.gdface.facelog</groupId> <artifactId>facelog-sql</artifactId> <!--这里package不能使用默认的jar,否则不会执行插件--> <packaging>maven-plugin</packaging> <name>facelog-sql</name> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <version>1.5</version> <dependencies> <!-- 定义依赖的数据库驱动jar包(mysql) --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> </dependencies> <configuration> <!-- 定义数据库连接参数 --> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/test</url> <username>root</username> <password></password> </configuration> <executions> <!-- 删除表操作 --> <execution> <id>clean-tables</id> <configuration> <srcFiles> <srcFile>${project.basedir}/sql/clean_tables.sql</srcFile> </srcFiles> </configuration> </execution> <!-- 创建表操作 --> <execution> <id>create-tables</id> <configuration> <srcFiles> <srcFile>${project.basedir}/sql/create_tables.sql</srcFile> </srcFiles> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
命令行执行如下:
# 通过@execution-id的方式指定执行id为‘clean-tables’的execution mvn -f run-sql.xml sql:execute@clean-tables # 通过@execution-id的方式指定执行id为‘create-tables’的execution mvn -f run-sql.xml sql:execute@create-tables
注意 Maven 3.3.1以上版本支持上述的@execution-id 的用法 参见 https://stackoverflow.com/questions/3166538/how-to-execute-maven-plugin-execution-directly-from-command-line
同时可参考:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/src/main/config/jdbc.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<!-- 定义依赖的数据库驱动jar包(mysql) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
<configuration>
<!-- 定义数据库连接参数 -->
<driver>${jdbc.driverClassName}</driver>
<url>${jdbc.url}</url>
<username>${jdbc.username}</username>
<password>${jdbc.password}</password>
</configuration>
<executions>
<!-- dump表结构 -->
<execution>
<id>clean-tables</id>
<configuration>
<srcFiles>
<srcFile>${project.basedir}/sql/clean_tables.sql</srcFile>
</srcFiles>
</configuration>
</execution>
<!-- dump表结构及数据 -->
<execution>
<id>create-tables</id>
<configuration>
<srcFiles>
<srcFile>${project.basedir}/sql/create_tables.sql</srcFile>
</srcFiles>
</configuration>
</execution>
</executions>
</plugin>