maven:sql-maven-plugin插件执行sql脚本

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

参考资料:

[《sql-maven-plugin usage》][1]
[《execute-mojo》][2]
[《Maven Properties Guide》][3]
[1]:http://www.mojohaus.org/sql-maven-plugin/usage.html
[2]:http://www.mojohaus.org/sql-maven-plugin/execute-mojo.html
[3]:https://cwiki.apache.org/confluence/display/MAVEN/Maven+Properties+Guide

Maven-compiler-plugin 是 Maven 构建工具的一个插件,用于编译 Java 代码。如果在构建过程中遇到了“无法解析”这类错误,通常意味着 Maven 无法找到或者无法正确配置这个插件。以下是一些可能导致这种情况的原因和解决方法: 1. 插件声明错误:检查 `pom.xml` 文件中关于 `maven-compiler-plugin` 的声明是否正确,包括插件的组ID(groupId)、插件ID(artifactId)和版本号(version)是否正确无误。 2. Maven 设置问题:确保你的 Maven 环境配置正确,包括 `JAVA_HOME` 环境变量设置为正确的 JDK 路径,以及 Maven 的 `settings.xml` 文件没有错误配置。 3. 网络问题:可能是因为 Maven 中央仓库的网络问题,导致插件无法下载。此时可以尝试更换 Maven 中央仓库的镜像,或检查网络连接是否正常。 4. 仓库问题:检查本地仓库中是否有 `maven-compiler-plugin` 相关的文件损坏或丢失,有时可以尝试删除本地仓库中的插件目录,然后重新执行构建来解决。 5. 兼容性问题:确保使用的 `maven-compiler-plugin` 版本与你的项目使用的 Java 版本兼容。例如,如果你使用的是 Java 8,而插件版本不支持 Java 8,那么就会出现兼容性问题。 解决这类问题的步骤通常包括: - 检查 `pom.xml` 文件中的插件配置。 - 清理并更新本地仓库的依赖。 - 确保网络设置和 Maven 环境变量配置正确。 - 使用 `mvn help:effective-pom` 命令查看最终解析的 `pom.xml` 文件,以确定是否插件确实配置正确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值